将创建SeleniumWebDriver实例的语句放在函数内部/外部如何影响按xpath查找元素?
请参阅以下代码:将创建SeleniumWebDriver实例的语句放在函数内部/外部如何影响按xpath查找元素?,selenium,xpath,webdriver,multiprocessing,instance,Selenium,Xpath,Webdriver,Multiprocessing,Instance,请参阅以下代码: def parse(height_id): driver2=webdriver.Firefox() driver2.get(height_id) block_details_web_element=driver2.find_element_by_xpath('//*[@id="__next"]/div[3]/div/div[3]/div[1]/div/div') print (block_details_web_element) print(blo
def parse(height_id):
driver2=webdriver.Firefox()
driver2.get(height_id)
block_details_web_element=driver2.find_element_by_xpath('//*[@id="__next"]/div[3]/div/div[3]/div[1]/div/div')
print (block_details_web_element)
print(block_details_web_element.text)
print(" --- BLOCK PARSED SUCCESSFULLY! ---\n")
driver2.quit()
#the following parts are outside the function:
p = Pool(4)
records = p.map(parse, height_list_on_each_page2) #height_list_on_each_page2 is a list of URLs.
p.terminate()
p.join()
(例如,一个典型的URL:)
现在,这很好,但需要大量的时间。因此,我计划将语句driver2=webdriver.Firefox()
放在parse
函数之外,这样我就不会每次调用函数时都重新创建webdriver的实例。[我还从这个函数中删除了语句driver2.quit()。这节省了时间,但是,打印状态print(块详细信息\u web元素)
几乎有一半的时间返回None
作为输出
我怀疑find\u elements\u by\u xpath
方法是否工作不正常。这是因为我正在使用多重处理吗
任何洞察,为什么会发生这种情况?请提出解决办法
编辑:(这是错误)
()find\u element\u by\u xpath
不会返回None
,它将返回元素或抛出TimeoutException
。这是因为我正在使用多重处理吗?这可能是原因,你误解了。语句[print(block\u details\u web\u element)]在这些情况下打印“none”,语句[print(block\u details\u web\u element.text)]在这些情况下打印“none type element has no attribute text”。如果print(block\u details\u web\u element)
打印none
,这意味着block\u details\u web\u元素
是None
,这意味着通过xpath查找元素
返回None
。这是不可能的。它可能是来自另一个地方的多处理或None
的东西。请看我得到了这个错误:请看错误: