[英]JavaScript click works in console but not inside Selenium execute_script
[英]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.