python - TypeError: 'FirefoxWebElement' 对象是不可迭代的错误循环通过硒动态网页上的页面
问题描述
这是我要抓取的网站。
我想抓取第一页表格中的所有信息:
然后单击第二个并执行相同操作:
以此类推,直到第 51 页。我知道如何使用 selenium 点击第二页:
link = "http://www.nigeriatradehub.gov.ng/Organizations"
driver = webdriver.Firefox()
driver.get(link)
xpath = '/html/body/form/div[3]/div[4]/div[1]/div/div/div[1]/div/div/div/div/div/div[2]/div[2]/span/a[1]'
find_element_by_xpath(xpath).click()
但我不知道如何设置代码以便循环浏览每一页。我获取 xpath 的过程首先是手动的(我继续使用 Firefox,检查项目并将其复制到代码中),所以我不知道如何自动执行该步骤,然后以下的。
我尝试在网页 html 中提高一个级别,并使用我想要的元素选择页面的整个部分,然后循环浏览它们,但这不起作用,因为它是一个 Firefox 网络对象(见下文)。这是页面源相关部分的快照:
通过像这样调用更高级别的 xpath:
path = '//*[@id="dnn_ctr454_View_OrganizationsListViewDataPager"]'
driver.find_element_by_xpath(path)
并试图看看我是否可以通过它循环:
for i in driver.find_element_by_xpath(path):
i.click()
任何建议将不胜感激。
解决方案
此错误消息...
...意味着您正在尝试迭代WebElement,因为只有列表对象是可迭代的。
解决方案
在for()
循环中创建一个列表来遍历它的元素,而不是使用find_element*
你需要使用find_elements*
. 因此,您的有效代码块将是:
for i in driver.find_elements_by_xpath(path):
i.click()
推荐阅读
- python - 从 redis 检索 django 查询集对象时出现未知错误
- python - 如何在 Tensorflow 对象检测 API 中使用 Pascal VOC 或 Coco 评估指标评估 Easy/Moderate/Hard 实例?
- html - 动态居中工具提示
- java - 使用范围存储阅读字幕?
- c# - (C#)while循环逻辑,如何计算在value1到达value2之前会有多少循环
- docker - Docker没有创建目录
- php - 如何在数据库行中插入数组值?
- python - 根据与 Python 中的键匹配的条件对字典中的值求和
- php - AJAX 不会阻止重定向到 PHP 页面
- perl - $^S 不会在 Perl 中捕获 Eval 死亡