首页 > 解决方案 > 如何单击带有图像的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&amp;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&amp;FieldElemFormat=gif']")
elem.click()

现在我收到“没有这样的元素”的错误。

标签: pythonseleniumwebdriver

解决方案


有一个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()

推荐阅读