[英]How to click on a button with Selenium
我尝试在 Python 中使用 Selenium 捕捉查看器中的“下一步”按钮,但没有任何效果,我收到一条错误消息。
我执行的代码:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options, executable_path=r'chromedriver.exe')
driver.get('https://web.nli.org.il/sites/NLI/Hebrew/digitallibrary/pages/viewer.aspx?&presentorid=MANUSCRIPTS&docid=PNX_MANUSCRIPTS990000907570205171-1')
WebDriverWait(driver, 10)
到现在为止,一切都很好。 这就是问题出现的地方。
在检查此箭头的源代码时,我得到以下代码: <div id="next" class="left"><a href="#" title="next"> </a></div>
所以这些是我的尝试:
XPath
driver.find_elements_by_xpath('//*[@id="next"]')
返回一个空列表。
ID
driver.find_elements_by_id("next")
返回一个空列表。
那么,我怎样才能抓住这个按钮并点击它呢?
该箭头在 iframe 中,因此驱动程序需要更改其焦点。
然后你可以使用explicit wait
来点击它:
CSS_SELECTOR :
div#next
示例代码:
driver = webdriver.Chrome(options=options, executable_path=r'chromedriver.exe')
driver.get('URL here')
WebDriverWait(driver, 10)
wait = WebDriverWait(driver, 10)
wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "MainIframe")))
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#next"))).click()
进口:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
您可以使用以下 css 选择器:
.left [title='Next']
div.left
div .left [title='Next']
//div[@id='next']//child::a
可能有不同的元素,其 id 为next
所以专门为div
定义,我可以看到a
是div
的孩子
你可以用explicitWait检查它
wait = WebDriverWait(driver,10)
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@id='next']//child::a"))).click()
还找到了一个id = MainIframe
和name = zoomer
的iframe
,在该iframe
下可以使用所需的元素,因此您可以切换到框架并获取所需的元素
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.