无法使用execute_script Selenium用javascript单击按钮

时间:2019-04-13 11:21:54

标签: javascript python selenium selenium-webdriver automated-tests

enter image description here我正在尝试通过接受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代码时,我没有收到任何错误

3 个答案:

答案 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()