Python Can';t使用Selenium(web scrape)点击按钮

Python Can';t使用Selenium(web scrape)点击按钮,python,selenium,web-scraping,Python,Selenium,Web Scraping,我正试图点击这个按钮,这样我就可以进入下一页,但似乎不适合我。我正在尝试单击“搜索检验报告”按钮 这是此源的xpath//[@id=“btnOK”]。所以我尝试使用driver.find_element_by_xpath('/[@id=“btnOK”]')。单击()会出现一个错误,说找不到元素 这是该网站的链接。 任何帮助都很好。这是因为按钮位于不同的iframe中。要单击该按钮,您必须将焦点切换到该iframe。你是这样做的: iframe = driver.find_element_by_

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

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

这是该网站的链接。


任何帮助都很好。

这是因为按钮位于不同的
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
u是错误的。您在
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)
selenium.webdriver.support中的
将预期的_条件导入为EC
从selenium.webdriver.common.by导入
从selenium.webdriver.support.ui导入WebDriverWait
从selenium导入webdriver
chrome\u options=webdriver.ChromeOptions()
#chrome_选项。添加_参数('--headless')
chrome_选项。添加_参数('--no sandbox')
chrome_选项。添加_参数('--disable dev shm usage')
wd=webdriver.Chrome(“”,options=Chrome\u options)
#通过selenium加载页面
wd.get(“https://www.halton.ca/For-Residents/Food-Safety/Dinewise/Search-Directory-of-Food-Premises-Dinewise")
#等待iframe,切换到它
frame=WebDriverWait(wd,30)。直到(EC.frame-to-be-available-and-switch-to-it((By.ID,“iframe-form”))
#等待按钮,滚动到它,单击它
btn=WebDriverWait(wd,30)。直到(EC.存在位于((By.ID,'btnOK'))的元素)
wd.execute_脚本(“参数[0].scrollIntoView();”,btn)
wd.execute_脚本(“参数[0]。单击();”,btn)

请检查我的代码是否适用于美国。