python - 如何单击带有图像的onclick链接?蟒蛇硒
问题描述
我只是在学习如何在 Python 中使用 Selenium 动态地进行网页抓取。我目前正在尝试单击网页中的链接以向前翻页搜索结果。
到目前为止,这是我正在使用的代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome('C:\\Users\\km13\\chromedriver.exe')
driver.get("http://www.congreso.gob.pe/pley-2016-2021")
elem = driver.find_element_by_css_selector("img[src='/Sicr/TraDocEstProc/CLProLey2016.nsf/8eac1ef603908b5105256cdf006c41b1/$Body/0.AB2?OpenElement&FieldElemFormat=gif']")
elem.click()
这是与我要单击的元素相对应的 HTML:
`<a href="" onclick="return _doClick('05257FB7005EB655.8eac1ef603908b5105256cdf006c41b1/$Body/0.A50', this, null)"><img src="/Sicr/TraDocEstProc/CLProLey2016.nsf/8eac1ef603908b5105256cdf006c41b1/$Body/0.AB2?OpenElement&FieldElemFormat=gif" width="81" height="16" border="0"></a>`
从我对 HTML 的有限了解看来,链接实际上是嵌入在 gif 中的,这就是为什么我尝试使用与该图像一起使用的 CSS 选择器。但这没有用。
任何指导将不胜感激!
更新:我通过添加以下导入更改了我的代码
from selenium.webdriver.common.by import By
我更改了以下内容:
elem = driver.find_element(By.CSS_SELECTOR, "img[src='/Sicr/TraDocEstProc/CLProLey2016.nsf/8eac1ef603908b5105256cdf006c41b1/$Body/0.AB2?OpenElement&FieldElemFormat=gif']")
elem.click()
现在我收到“没有这样的元素”的错误。
解决方案
有一个iframe。你需要先切换到iframe才能访问元素。试试下面的代码。使用WebDriverWait来处理动态元素。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome('C:\\Users\\km13\\chromedriver.exe')
driver.get("http://www.congreso.gob.pe/pley-2016-2021")
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.NAME, 'ventana02')))
elem = WebDriverWait(driver, 10).until(EC.element_to_be_clickable(
(By.XPATH, "//a[contains(@onclick,'A50')]/img[contains(@src,'Sicr/TraDocEstProc/CLProLey')]")))
elem.click()
已编辑
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome('C:\\Users\\km13\\chromedriver.exe')
driver.get("http://www.congreso.gob.pe/pley-2016-2021")
driver.switch_to.frame(0)
elem=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//a[contains(@onclick,'A50')]/img[contains(@src,'Sicr/TraDocEstProc/CLProLey')]")))
elem.click()
推荐阅读
- sql - 接收 ORA-01843: 检索两个日期之间的数据时出现无效月份错误
- c++ - 将嵌套的“for循环”转换为模块
- go - 在 Go 中使用 with context.WithTimeout() 时的最佳实践是什么?
- php - 在php中提取数据
- javascript - 是否有一种微妙的方法可以在 Javascript 中传递日历事件变量
- c++ - 我如何解决migw安装问题?
- javascript - 是否可以在不使用 innerHTML 的情况下将标签替换为字符串中的 href 链接?
- sql - Postgres 交叉表谓词下推
- flutter - Flutter api使用riverpod登录
- c++ - 为什么 unordered_map 由于“保留”而有足够的桶时大小会增加?