python - 如何在遍历 URL 时使用 Selenium Python 查找 Web 元素
问题描述
我需要从一百万个网页中循环并刮取一个元素(所有页面的类名相同)。我以以下(简化)方式设置了代码:
driver = webdriver.Firefox()
wait = WebDriverWait(driver, 10)
detail_dict = {}
for i in range(1000000):
url = f'http://www.cnappc.it/risultato.aspx?IDAssociato={i}&tipo=1#edit'
driver.get(url)
elem_detail = wait.until(expected_conditions
.presence_of_element_located((By.CLASS_NAME, 'content')))
detail_dict[i] = elem_detail.text
代码运行得相当顺利,当我中断内核进行检查时,我注意到每次迭代都在i
增加url
。但是,驱动程序网页“卡”在第一个 URL 上,即http://www.cnappc.it/risultato.aspx?IDAssociato=0&tipo=1#edit,因此elem_detail.text
一遍又一遍地返回相同的字符串。尽管等待页面完全加载,但似乎驱动程序网页无法跟上该driver.get(url)
方法。.get()
driver.get 方法将导航到 URL 给出的页面。WebDriver 将等待页面完全加载(即“onload”事件已触发),然后再将控制权返回给您的测试或脚本。
我为 插入了预期条件elem_detail
,但无济于事。设置time.sleep(2)
后driver.get(url)
允许驱动程序网页更改和显示不同的内容,但随后我将面临严重的减速。即使这样,页面也会不时卡住,并且字典值条目最终会不系统地重复。
您能否推荐一种不涉及的稳健方法time.sleep()
?
仅供参考:我正在使用 selenium 和 geckodriver。
解决方案
我设法解决了切换到webdriver.Chrome()
. webdriver 实际上等待每个页面加载,搜索类元素并移动到下一页,而不指定任何time.sleep()
.
推荐阅读
- autohotkey - AHK 脚本不会在 C:\ 目录中打开终端,但在其他地方会
- python - 如何将输入行中的值传递到按钮调用的 python 函数中
- integer - 两个整数之间的估计操作数(启发式)
- reactjs - 最新版本的刷卡器不工作,说“无法解决'刷卡器'”
- r - 按顺序数字模式匹配列名,并计算所有匹配项的 rowMeans
- c# - VueJs + ASP.Net Core Web API 发出 post 请求
- python - 尝试从 csv 文件绘图时出现索引错误
- python - 列子集上的 df.replace 想要保留完整的数据框
- android - Android StaggeredGridLayoutManager 将不同高度的项目对齐到底部
- arrays - Mule 4 DataWeave 2 数组映射