在 Python 上使用 Selenium 无法在弹出窗口 Window 上定位元素
Can't locate element on Pop-Up Window using Selenium on Python
我想用这个 url 从 Duden 网页上抓取一些元素:https://www.duden.de/rechtschreibung/aussuchen。
当我手动查找页面时,没有出现弹出窗口,但是当我在 python 上使用 selenium 时,出现了:image of pop up
我已经尝试过很多方法,例如阻止一般的弹出窗口,或尝试点击接受按钮。所有这些都不起作用。
我试图找到框架的一个元素并打印一条语句,然后查看它是否可以找到这些元素,但这也不起作用。
有谁知道为什么会这样或者我可以尝试更多吗?
这些是我尝试过的一些东西:
屏蔽:
def getAllWordForms(word):
options = Options()
profile = webdriver.FirefoxProfile()
profile.set_preference("dom.disable_open_during_load", False)
driver = webdriver.Firefox(firefox_profile=profile,options=options, executable_path=os.path.join(driver_location, 'geckodriver'))
main_url = 'https://www.duden.de/rechtschreibung/'
word_url = main_url + '{}'.format(word)
driver.get(word_url)
看能否在弹出框中找到元素:
def getAllWordForms(word):
options = Options()
driver = webdriver.Firefox(options=options, executable_path=os.path.join(driver_location, 'geckodriver'))
main_url = 'https://www.duden.de/rechtschreibung/'
word_url = main_url + '{}'.format(word)
driver.get(word_url)
driver.implicitly_wait(10)
driver.switch_to.frame(1)
if driver.find_elements_by_class_name('message-button'):
print('yes')
点击按钮:
def getAllWordForms(word):
options = Options()
options.headless = False
driver = webdriver.Firefox(options=options, executable_path=os.path.join(driver_location, 'geckodriver'))
main_url = 'https://www.duden.de/rechtschreibung/'
word_url = main_url + '{}'.format(word)
driver.get(word_url)
driver.implicitly_wait(10)
driver.switch_to.frame(1)
button = driver.find_element_by_xpath("//button[@aria-label='AKZEPTIEREN']")
button.click()
driver.switch_to.default_content()
我尝试了各种组合,但都不行。
页面元素的结构如下:
structure of page_1
structure of page_2
希望我能解释正确,也许有人能帮助我。
每次启动网络驱动程序时,您都在使用新的临时配置文件。该个人资料没有 cookie,因此网站将其视为需要接受 cookie 消息的新用户。
我查看了您的网站并关闭了您需要切换 iframe 的消息。您已经接近您的解决方案,可能只是需要一种不同的方法来选择框架...
这段代码对我有用:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.duden.de/rechtschreibung/aussuchen")
iframe = driver.find_element_by_xpath("//iframe[contains(@id,'sp_message_iframe')]")
driver.switch_to.frame(iframe)
cookieAccpet = WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, "//button[text()='AKZEPTIEREN']")))
cookieAccpet.click()
driver.switch_to.default_content()
记得在最后使用 driver.switch_to.default_content()
切换回默认帧,然后您可以继续您的脚本。
我想用这个 url 从 Duden 网页上抓取一些元素:https://www.duden.de/rechtschreibung/aussuchen。 当我手动查找页面时,没有出现弹出窗口,但是当我在 python 上使用 selenium 时,出现了:image of pop up
我已经尝试过很多方法,例如阻止一般的弹出窗口,或尝试点击接受按钮。所有这些都不起作用。
我试图找到框架的一个元素并打印一条语句,然后查看它是否可以找到这些元素,但这也不起作用。
有谁知道为什么会这样或者我可以尝试更多吗?
这些是我尝试过的一些东西:
屏蔽:
def getAllWordForms(word): options = Options() profile = webdriver.FirefoxProfile() profile.set_preference("dom.disable_open_during_load", False) driver = webdriver.Firefox(firefox_profile=profile,options=options, executable_path=os.path.join(driver_location, 'geckodriver')) main_url = 'https://www.duden.de/rechtschreibung/' word_url = main_url + '{}'.format(word) driver.get(word_url)
看能否在弹出框中找到元素:
def getAllWordForms(word): options = Options() driver = webdriver.Firefox(options=options, executable_path=os.path.join(driver_location, 'geckodriver')) main_url = 'https://www.duden.de/rechtschreibung/' word_url = main_url + '{}'.format(word) driver.get(word_url) driver.implicitly_wait(10) driver.switch_to.frame(1) if driver.find_elements_by_class_name('message-button'): print('yes')
点击按钮:
def getAllWordForms(word): options = Options() options.headless = False driver = webdriver.Firefox(options=options, executable_path=os.path.join(driver_location, 'geckodriver')) main_url = 'https://www.duden.de/rechtschreibung/' word_url = main_url + '{}'.format(word) driver.get(word_url) driver.implicitly_wait(10) driver.switch_to.frame(1) button = driver.find_element_by_xpath("//button[@aria-label='AKZEPTIEREN']") button.click() driver.switch_to.default_content()
我尝试了各种组合,但都不行。
页面元素的结构如下: structure of page_1 structure of page_2
希望我能解释正确,也许有人能帮助我。
每次启动网络驱动程序时,您都在使用新的临时配置文件。该个人资料没有 cookie,因此网站将其视为需要接受 cookie 消息的新用户。
我查看了您的网站并关闭了您需要切换 iframe 的消息。您已经接近您的解决方案,可能只是需要一种不同的方法来选择框架...
这段代码对我有用:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.duden.de/rechtschreibung/aussuchen")
iframe = driver.find_element_by_xpath("//iframe[contains(@id,'sp_message_iframe')]")
driver.switch_to.frame(iframe)
cookieAccpet = WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, "//button[text()='AKZEPTIEREN']")))
cookieAccpet.click()
driver.switch_to.default_content()
记得在最后使用 driver.switch_to.default_content()
切换回默认帧,然后您可以继续您的脚本。