- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从网页中使用 javascript 更新的表中获取数据 ( http://www.madrid.org/wpad_pub/run/j/MostrarFichaCentro.icm?cdCentro=28063799 ),并且我正在使用 dryscrape。我有一个代码可以很好地处理页面加载时默认生成的表。但我需要通过单击单选按钮(第二个表中标记为“主要”的单选按钮)来更新其中一个。
我更改了我的代码,它看起来像这样:
from bs4 import BeautifulSoup
import pandas as pd
import dryscrape
render = dryscrape.Session()
render.visit("http://www.madrid.org/wpad_pub/run/j/MostrarFichaCentro.icm?cdCentro=28063799")
radiob = render.at_css('#nivEd12\.grafica3')
radiob.click()
source = render.body()
school_card = BeautifulSoup(source, "lxml")
school_tables = school_card.findAll('table', class_="tablaGraficaDatos")
table = list(school_tables)[1]
pd.read_html(table.prettify())
但是我得到以下错误:
InvalidResponseError: {"class":"ClickFailed","message":"Failed to find position for element /html/body/div[@id='contenedor']/div[@id='solapas']/div[10]/table/tbody/tr[1]/td[1]/div[@id='solapaspanel1']/div[@id='cuerpoL']/div/div[@id='capaSelGrafica']/div[@id='display.grafica3']/table/tbody/tr[2]/td[2]/input[@id='nivEd12.grafica3'] because it is not visible"}
我也尝试过 xpath:
radiob = render.at_xpath('//*[(@id = "nivEd12.grafica3")]')
但我得到了同样的错误。
我使用 Selector Gadget 获取 CSS 和 XPath。我想单选按钮的路径有一些错误,但我不知道如何修复它。有什么想法吗?
提前致谢。
更新
@CtheSky 为我提供了一个适用于单例网址的解决方案。但是当我尝试循环到多个 url 时,出现错误。这是脚本。
schools_urls2 = ['http://www.madrid.org/wpad_pub/run/j/MostrarFichaCentro.icm?cdCentro=28077865',
'http://www.madrid.org/wpad_pub/run/j/MostrarFichaCentro.icm?cdCentro=28063751',
'http://www.madrid.org/wpad_pub/run/j/MostrarFichaCentro.icm?cdCentro=28004989',
'http://www.madrid.org/wpad_pub/run/j/MostrarFichaCentro.icm?cdCentro=28004990']
school_tables_collection = {}
school_name_collection = []
render = dryscrape.Session()
for z, school in enumerate(schools_urls[:5]):
render.visit(school)
render.driver.exec_script('document.getElementById("nivEd12.grafica3").click();')
source = render.body()
school_card = BeautifulSoup(source, "lxml")
school_tables = school_card.findAll('table', class_="tablaGraficaDatos")
school_name = school_card.find(style="text-transform:uppercase").next.next
for i, table in list(enumerate(school_tables)):
if i <= 1:
school_tables_collection[school_name + "_" + str(i)] = \
pd.read_html(table.prettify())
school_name_collection.append(school_name)
print "Tables of school %s extracted" % schools_urls[z]
知道我做错了什么吗?
解决方案
我终于设法修复了它。这是我的一个愚蠢的错误:我调用的第一个 url 没有我正在寻找的按钮元素,所以它返回了错误。我在循环中加入了 try
和 except
,现在它可以工作了。
非常感谢@CtheSky 的帮助
最佳答案
正如错误信息所说,css选择没有问题。这是因为单选按钮是不可见的,所以点击失败。它的父节点不显示:
<div id="solapaspanel1" style="display: none;">...</div>
您可以运行一段 javascript 来触发该点击事件:
render.driver.exec_script('document.getElementById("nivEd12.grafica3").click();')
请注意,在您的第二个示例中,url http://www.madrid.org/wpad_pub/run/j/MostrarFichaCentro 中没有包含
。因此,脚本通过在 id=nivEd12.grafica3
的元素。 icm?cdCentro=28077865Null
上调用 click()
方法而失败,这是不允许的并引发错误。
可能某些页面中没有目标对象,或者他们只是使用了另一个 id 或 name。您应该使用更通用的规则来指定您想要的内容并避免此错误,您可以通过 school_card.find_XX(...)
或使用 eval_script
检查元素是否存在如果愿意,可以运行 javascript 语句。
关于python - 使用 dryscrape 进行网页抓取 : error selecting radio button CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46525394/
我正在尝试提交表单并检索一些数据使用 dryscrape 但当我执行程序时,出现错误: Traceback (most recent call last): File "easyjettest.
我正在尝试在 Mac 上进行 dryscrape session 。我尝试运行的代码如下: import dryscrape session = dryscrape.Session(base_url
我正在尝试使用 pip 在我的 Windows 10 labtop 上安装 dryscrape,我有 python 3.5。 我从……开始 C:\Users\Nick L>pip install dr
我正在使用 dryscrape/webkit_server 来抓取启用 javascript 的网站。 进程 webkit_server 的内存使用似乎随着每次调用 session.visit() 而
我正在尝试使用 Drcscrape 登录 Facebook,但出现此错误。 我正在使用 OSX Traceback (most recent call last): File "/Users/no
我正在尝试从 Yahoo 抓取一些数据。我写了一个有效的脚本 - 有时。有时当我运行脚本时,我能够下载完整的页面 - 其他时候,页面只加载了部分 - 数据部分丢失。 更令人困惑的是,当我在浏览器中导航
我有很多活跃的公共(public)代理,我想用来抓取一些页面。 谁能给我一个示例,说明如何在 dryscrape 中设置代理? https://github.com/niklasb/dryscrape
我想从站点获取一些数据,这需要登录。 我通过请求登录 url = "http://example.com" response = requests.get(url, {"email":"a@gmail
我正在尝试从网页中使用 javascript 更新的表中获取数据 ( http://www.madrid.org/wpad_pub/run/j/MostrarFichaCentro.icm?cdCen
我正在尝试抓取 http://apps2.eere.energy.gov/wind/windexchange/economics_tools.asp 上的 table enter image desc
我正在 python3 中使用 dryscrape 编写一个scraper。我试图在 __scraping __session 期间访问数百个不同的 url,并在每个 url 上单击大约 10 个 a
我需要为 python 安装 dryscrape,但出现错误,这是什么问题? C:\Users\parvij\Anaconda3\Scripts>pip install dryscrape 我明白了:
我是一名优秀的程序员,十分优秀!