尝试单击 Cookies 时出现 Selenium TimeoutException 同意
Selenium TimeoutException when trying to click Cookies Agree
我正在尝试从网站上抓取一些文章,在此之前,我需要在 Python 中使用 Selenium 单击“同意 Cookies”。
但不幸的是,我总是收到 TimeoutException 或 NoSuchElementException!
我发现点击按钮在 iframe 中,所以我切换到它并点击了同意按钮。
homepage = 'link'
driver.maximize_window()
driver.get(homepage)
driver.implicitly_wait(5)
driver.switch_to.frame('location')
try:
consent = wait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, 'classname')))
consent.click()
except TimeoutException :
print('timeoutexception')
driver.switch_to.default_content()
iframe
consent click button
但我仍然无法解决 TimeoutException 错误。
我做错了什么....?!
你弄乱了 wait
和 driver
对象。它们是不同的。切换到 iframe 并等待您的按钮。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# switch to frame here
wait = WebDriverWait(driver, 20)
wait.until(EC.element_to_be_clickable(
(By.CSS_SELECTOR, '.message-component.message-button.no-children:nth-of-type(2)')))
consent = driver.find_element_by_css_selector('.message-component.message-button.no-children:nth-of-type(2)')
consent.click()
有两个 .message-component.message-button.no-children
css 定位器,您需要第二个。
要查找 iframe 使用(这是防弹):
driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@id,'sp_message_iframe_')]"))
我正在尝试从网站上抓取一些文章,在此之前,我需要在 Python 中使用 Selenium 单击“同意 Cookies”。
但不幸的是,我总是收到 TimeoutException 或 NoSuchElementException!
我发现点击按钮在 iframe 中,所以我切换到它并点击了同意按钮。
homepage = 'link'
driver.maximize_window()
driver.get(homepage)
driver.implicitly_wait(5)
driver.switch_to.frame('location')
try:
consent = wait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, 'classname')))
consent.click()
except TimeoutException :
print('timeoutexception')
driver.switch_to.default_content()
iframe
consent click button
但我仍然无法解决 TimeoutException 错误。
我做错了什么....?!
你弄乱了 wait
和 driver
对象。它们是不同的。切换到 iframe 并等待您的按钮。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# switch to frame here
wait = WebDriverWait(driver, 20)
wait.until(EC.element_to_be_clickable(
(By.CSS_SELECTOR, '.message-component.message-button.no-children:nth-of-type(2)')))
consent = driver.find_element_by_css_selector('.message-component.message-button.no-children:nth-of-type(2)')
consent.click()
有两个 .message-component.message-button.no-children
css 定位器,您需要第二个。
要查找 iframe 使用(这是防弹):
driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@id,'sp_message_iframe_')]"))