首页 > 解决方案 > 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()

我收到以下错误: 在此处输入图像描述

任何建议将不胜感激。

标签: pythonseleniumfirefoxweb-scrapingtypeerror

解决方案


此错误消息...

对象不可迭代

...意味着您正在尝试迭代WebElement,因为只有列表对象是可迭代的。


解决方案

for()循环中创建一个列表来遍历它的元素,而不是使用find_element*你需要使用find_elements*. 因此,您的有效代码块将是:

for i in driver.find_elements_by_xpath(path):
    i.click()

推荐阅读