无法使用Selenium(web scrape)单击按钮

2024-06-26 00:07:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图点击这个按钮,这样我就可以进入下一页,但似乎不适合我。我正在尝试单击“搜索检验报告”按钮

这是此源的xpath//[@id=“btnOK”]。所以我尝试使用driver.find_element_by_xpath('/[@id=“btnOK”]')。单击()会出现一个错误,显示无法定位元素

这是该网站的链接。 https://www.halton.ca/For-Residents/Food-Safety/Dinewise/Search-Directory-of-Food-Premises-Dinewise

任何帮助都会很好


Tags: 定位id元素byfood报告driver错误
2条回答

这是因为按钮位于不同的iframe中。为了点击那个按钮,你必须将焦点切换到那个iframe。你是这样做的:

iframe = driver.find_element_by_id("iframe-form")

driver.switch_to.frame(iframe)

btn = driver.find_element_by_xpath('//*[@id="btnOK"]')

btn.click()

另外,需要注意的另一件事是,您提供的xpath是错误的。你在xpath中错过了一个*。右边的xpath'//*[@id="btnOK"]'

完整代码:

from selenium import webdriver

driver = webdriver.Chrome()

driver.get('https://www.halton.ca/For-Residents/Food-Safety/Dinewise/Search-Directory-of-Food-Premises-Dinewise')

iframe = driver.find_element_by_id("iframe-form")

driver.switch_to.frame(iframe)

btn = driver.find_element_by_xpath('//*[@id="btnOK"]')

btn.click()

希望这有帮助

使用webdriver等待的替代解决方案:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
#chrome_options.add_argument(' headless')
chrome_options.add_argument(' no-sandbox')
chrome_options.add_argument(' disable-dev-shm-usage')
wd = webdriver.Chrome('<PATH_TO_CHROMEDRIVER>', options=chrome_options)

# load page via selenium
wd.get("https://www.halton.ca/For-Residents/Food-Safety/Dinewise/Search-Directory-of-Food-Premises-Dinewise")
# wait for iframe, switch to it
frame = WebDriverWait(wd, 30).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"iframe-form")))
# wait for button, scroll to it, click it
btn = WebDriverWait(wd, 30).until(EC.presence_of_element_located((By.ID, 'btnOK')))
wd.execute_script("arguments[0].scrollIntoView();", btn)
wd.execute_script("arguments[0].click();", btn)

相关问题 更多 >