如何告诉selenium在某一点不执行js?

2024-10-04 07:30:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想抓取一个网站,它有一些由js生成的内容。 该站点每5秒运行一次js更新内容(请求一个新的加密js文件,无法解析)。在

我的代码:

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.set_window_size(1120, 550)

driver.get(url)

trs = driver.find_elements_by_css_selector('.table tbody tr')

print len(trs)

for tr in trs:
    try:
        items.append(tr.text)
    except:
        # because the js update content, so this tr is missing
        pass

print len(items)

len(items)len(trs)不匹配。 如何告诉selenium在我运行trs = driver.find_elements_by_css_selector('.table tbody tr')后停止执行js或停止工作?在

我以后需要使用trs,所以不能{}

异常详细信息

^{pr2}$

似乎tr丢失了。在

注:我需要用硒来选择元素。其他lib比如lxmlpyquery不知道哪个元素是display:none,而.text()经常在<script>中得到注释或其他东西,等等。遗憾的是python没有一个完美的Jquery克隆。在


Tags: 内容bylendriverseleniumjstableitems
1条回答
网友
1楼 · 发布于 2024-10-04 07:30:35

用刮痧。一旦确定页面已加载,请使用以下方法抓取正文:

response = TextResponse(url=self.driver.current_url, body=self.driver.page_source, encoding='utf-8')

现在您有了页面的静态副本,这样就可以使用scrapy了响应.xpath获取你需要的任何数据。这answer更详细。在

相关问题 更多 >