我尝试使用selenium来遍历字符串列表,并使用Google Chrome搜索列表中的每个元素。
下面是我使用递归创建的代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome(executable_path="/Applications/Google_Chrome.app")
driver.implicitly_wait(0.5)
file1 = open('questions.txt', 'r')
File = file1.readlines()
driver.get("https://www.google.com/")
m = driver.find_element("name", "q")
def runSearches(list):
if list:
m = driver.find_element("name", "q")
m.send_keys(list[0])
time.sleep(0.2)
m.send_keys(Keys.ENTER)
time.sleep(0.2)
driver.back()
time.sleep(0.2)
return runSearches(list[1:])
else:
print("done")
runSearches(File)
当我运行这段代码时,它只对列表中的第一项有效,但是,在搜索之后,selenium忽略了driver.back(),不返回下一页,并返回以下代码:
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
我理解这个问题的原因。页面不返回,因此selenium正在查找当前页面上不存在的元素。我不理解的是为什么selenium不返回页面。无论我在命令之间设置多长时间的睡眠时间,总是出现相同的结果。使用driver.get(“https://www.google.com/“)代替driver.back()不起作用。
我曾尝试使用for循环实现这个函数的迭代版本,但没有成功,也没有结果差异。
1条答案
按热度按时间flvlnr441#
这是一个常见的问题,当selenium能够找到元素但无法再定位它时就会发生。您只需处理异常并再次捕获元素。
您需要在脚本中导入异常:
您还可以考虑在查找元素时使用wait,因为不能保证在页面加载时立即加载这些元素。