繁体   English   中英

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

[英]Can't click a button with javascript using execute_script Selenium

在此处输入图片说明 我正在尝试通过接受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代码时,我没有收到任何错误

尝试以下代码与我一起正常工作:

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

我发现该网站创建了数量<div class="ReactModalPortal"></div><div class="ReactModalPortal"></div> ,并且我使用的是div:nth-​​child(x),其中x是这个奇怪的,非恒定数量的空白div。 我的x值是常数,所以我选择错误。

这是一个解决方案:

driver.execute_script("document.getElementsByClassName('modal-options__buttons')[0].getElementsByTagName('button')[0].click()")

代替

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM