Python Selenium WebDriver JavaScript 表格迭代

1 投票
1 回答
1220 浏览
提问于 2025-04-17 14:00

我最近在玩Beautiful Soup,感觉很好用,就是在处理JavaScript方面有些限制。为了弥补这个不足,我想用Selenium来帮忙。我想抓取的网站是 http://www.5dimes.eu/livelines/livelines.aspx

**我得提一下,我是在Windows系统上,QTWebKit没法用,听说那也是个选择。

这个网站需要你先点击一个复选框,才能显示表格。一旦我能看到表格,我以为一切都好了,但其实并不是。

我尝试使用

driver = webdriver.Chrome()
page = driver.get("http://www.5dimes.eu/livelines/livelines.aspx")
driver.find_element_by_xpath("//*[@id='l_26']").click()
html_source = driver.page_source

确实能让页面点击一个链接,但获取到的html_source里没有表格数据。

在测试过程中出现了几个问题。

  1. 复选框的xpath每天都在变,具体取决于发布了多少内容。有一天是26,第二天可能就变成27了。有没有其他方法可以通过类名或文本名来找到这个复选框呢?

  2. 一旦表格显示出来,我该如何提取这些数据呢?

我注意到类信息里提到了一个“hidden”属性

<div id="divLoading" style="width: 100%; text-align: center;" class="Hidden">
        <img id="imgLoading" src="images/scanning.gif">
    </div>

这可能是问题的根源吗?任何帮助都非常感谢。

1 个回答

1

可以试试这样做:

   L= find_elements(By.XPATH,"//div[@id='divl_25']/table/tbody/tr/td[1]");

这段代码会返回一个包含相同定位器的网页元素列表。(也就是说,你表格内容中的第一个)

如果想获取第二个的内容,你需要把的索引改成2。

   L= find_elements(By.XPATH,"//div[@id='divl_25']/table/tbody/tr/td[2]");

上面的代码会给你每一行的所有第二个。

拿到网页元素列表后,循环遍历这个列表,从每个元素中获取文本。这样你就能获取整个表格的数据了。

for ele in L:
        print ele.text;

希望这对你有帮助。

附注:我对Python和Selenium的绑定了解不多。

撰写回答