为了账号安全,请及时绑定邮箱和手机立即绑定

Selenium:无法单击 iframe 中的按钮

Selenium:无法单击 iframe 中的按钮

海绵宝宝撒 2023-09-02 16:14:59
我使用 selenium 加载页面:http://www.legorafi.fr/ 接下来,我尝试单击“Tout Accepter”按钮,但即使使用 css 选择器,它也不起作用。这是为了饼干。我尝试过这样的事情:driver.find_element_by_css_selector('').click()这是带有文字“Tout Accepter”的蓝色按钮
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

该元素Tout Accepter位于 an 内<iframe>,因此您必须:

  • 诱导WebDriverWait等待所需的框架可用并切换到它

  • 诱导WebDriverWait以使所需元素可单击

  • 您可以使用以下任一定位器策略:

  • 使用CSS_SELECTOR

driver.get('http://www.legorafi.fr/')

WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"div#appconsent>iframe")))

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.button--filled>span.baseText"))).click()

使用XPATH:


driver.get('http://www.legorafi.fr/')

WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//div[@id='appconsent']/iframe")))

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, 'button--filled')]/span[contains(@class, 'baseText')]"))).click()

注意:您必须添加以下导入:


from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.common.by import By

from selenium.webdriver.support import expected_conditions as EC

浏览器快照:

https://img1.sycdn.imooc.com/64f2ef420001975f06530248.jpg

查看完整回答
反对 回复 2023-09-02
?
慕后森

TA贡献1802条经验 获得超5个赞

该元素存在于 an 内部,iframe您需要切换iframe才能访问该元素。


induce WebDriverWait() 和 wait for frame_to_be_available_and_switch_to_it() 以及下面的 css 选择器


引发WebDriverWait()并等待element_to_be_clickable()并跟随xpath


driver.get("http://www.legorafi.fr/")

WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"#appconsent>iframe")))

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//span[text()='Tout Accepter']"))).click()

您需要导入以下库


from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC


查看完整回答
反对 回复 2023-09-02
?
哔哔one

TA贡献1854条经验 获得超8个赞

首先切换到横幅框架,然后单击接受按钮:


from selenium import webdriver


url = "http://www.legorafi.fr/"

driver = webdriver.Chrome()

driver.get(url)

driver.switch_to.frame(2)

button = "/html/body/div/div/article/div/aside/section[1]/button"      

driver.find_element_by_xpath(button).click()

(我使用 XPath 单击按钮,但这只是个人喜好)


希望有帮助!


查看完整回答
反对 回复 2023-09-02
  • 3 回答
  • 0 关注
  • 245 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信