我正在尝试通过接受Cookie并单击“确认”来摆脱Cookie弹出窗口。单击输入“ zgadzamsięna”没有任何问题,但是单击按钮“potwierdź”似乎是不可能的。我的代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
auction_url='https://www.g2a.com/grand-theft-auto-v-rockstar-key-global-i10000000788017'
driver = webdriver.Chrome()
driver.get(auction_url)
add_popup = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '//*[@id="webklipper-publisher-widget-container-notification-frame"]'))
)
driver.switch_to.frame(driver.find_element_by_xpath('//*[@id="webklipper-
publisher-widget-container-notification-frame"]'))
print('ads popup detected')
time.sleep(1)
driver.find_element_by_xpath('//*[@id="webklipper-publisher-widget-
container-notification-close-div"]').click()
print('ads popup closed')
driver.switch_to.default_content()
driver.execute_script("document.querySelector('#cookies-select-all').click();")#works fine
time.sleep(3)
driver.execute_script("document.querySelector('body > div:nth-child(76) > div > div > div > div > div.modal-options__buttons > button.btn.btn-primary').click();")#error
我得到的错误:
selenium.common.exceptions.WebDriverException: Message: javascript error: Cannot read property 'click' of null
有趣的是,当我在浏览器控制台中执行此js代码时,我没有收到任何错误
答案 0 :(得分:4)
尝试以下代码对我来说效果很好:
driver.execute_script("document.querySelector('body > div:nth-child(60) > div > div > div > div > div.modal-options__buttons > button.btn.btn-primary > span').click();")
或者您可以与下面的一个一起查找元素
driver.find_element_by_css_selector("div.modal-window button.btn-primary").click()
答案 1 :(得分:0)
我发现该网站创建了<div class="ReactModalPortal"></div>
数量惊人的数字,并且我使用的是div:nth-child(x),其中x是这个奇怪的,非恒定数量的空白div。我的x是常数,所以我选择错误...
这是一个解决方案:
driver.execute_script("document.getElementsByClassName('modal-options__buttons')[0].getElementsByTagName('button')[0].click()")
答案 2 :(得分:0)
代替
driver.execute_script("document.querySelector('body > div:nth-child(76) > div > div > div > div > div.modal-options__buttons > button.btn.btn-primary').click();")#error
尝试使用CSS选择器单击按钮。
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,'button.btn.btn-primary span'))).click()