【问题标题】:Unable to select Radio button with Selenium (python)无法使用 Selenium 选择单选按钮(python)
【发布时间】:2021-03-31 21:30:36
【问题描述】:

我一直在尝试使用 selenium 选择一个单选按钮,但我没有运气。所有其他选择器(登录、下拉等)都运行良好。

driver.find_element_by_xpath('//*[@id="content_grid"]/div[1]/div[2]/div[4]/div[2]/div[3]/label/div[1]/input').click()

这是我要选择的单选按钮... [1]:https://i.stack.imgur.com/X64k8.png

这是网页 - https://stathead.com/basketball/pgl_finder.cgi

感谢任何帮助!第一次海报和noobie coder :)

【问题讨论】:

  • xpath 在问题中是正确的。代码中是否存在特定的 selenium 异常?
  • 我不相信,我正在谷歌搜索硒异常!
  • selenium.common.exceptions.ElementClickInterceptedException: 消息:元素点击被拦截:元素在点 (173, 1014) 处不可点击
  • 你可以试试 xpath //*[@class="fieldset is_playoffs changed"]/div/div[3]
  • 没有工作 - 得到这个异常。 selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{"method":"xpath","selector":"//*[@class="fieldset is_playoffs changed"]/div/div [3]"}

标签: python selenium


【解决方案1】:

解决问题的方法很少。 问题发生在检索元素并向下滚动以单击它时,该站点会添加一个可能会阻碍该元素的横幅。

一种选择是始终全屏打开浏览器。

driver = webdriver.Chrome()
driver.maximize_window()

这应该有助于避免横幅妨碍.. 更少的滚动和更少的横幅与单选按钮重叠的机会

Selenium 还提供了一个库,用于在使用 WebDriverWait 满足条件时返回元素

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
el = WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[value="E"]')))

基本上,一旦元素被报告为可点击,上面将返回该元素。元素的可点击性可能不是这里的原因。这种方式仅确保可以单击找到的元素,但如果存在重叠则不验证(我怀疑这是这里的问题)。

第三个选项,你可以用 javaScript 去点击元素

driver.execute_script("arguments[0].click();", el)

【讨论】:

  • 嗨,尼克!感谢您的回答。我尝试使用 driver.maximize_window() 解决方案,但没有奏效。第二和第三个解决方案也不适合我。第一次尝试: el = WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[value="E"]'))) driver.execute_script("arguments[0].click();" , el) 第二次尝试:el = WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '[value="E"]'))) el.find_element_by_xpath('//*[@id= "content_grid"]/div[1]/div[2]/div[4]/div[2]/div[3]/label/div[1]/input').click()
  • el 实际上等于你的driver.find_element_by_xpath('//*[@id="content_grid"]/div[1]/div[2]/div[4]/div[2]/div[3]/label/div[1]/input') 我使用css_selector 对其进行了简化。 driver.find_element_by_css_selector('[value="E"]'). 获得值“E”。使用检查器并等于“Either”,我相信这是您尝试使用 xPath 单击的内容。一旦你得到“el”,就使用 javaScript。
  • 感谢您的耐心,尼克。运行代码后,我收到此错误。名称“EC”未定义。知道我在这里可能需要做什么吗?我应该导入一个额外的库吗?我已经完成了“ from selenium.webdriver.support.ui import WebDriverWait ”
  • EC 从这里开始 "直到(EC.element_to_be_clickable((By.CSS_SELECTOR, '[value="E"]')))"
  • 抱歉忘记导入了! from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By
猜你喜欢
  • 1970-01-01
  • 2018-08-04
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
  • 2023-01-19
  • 1970-01-01
  • 2014-02-14
  • 2017-08-02
相关资源
最近更新 更多