在python / Selenium中单击Javascript按钮时出现问题

时间:2018-12-31 16:17:01

标签: python selenium web-scraping

我正在尝试点击以下链接上标记为“ Pickup”的按钮:

https://firehouse.alohaorderonline.com/StartOrder.aspx?SelectMenuType=Retail&SelectMenu=1000560&SelectSite=01291

我的代码在下面,但是什么都没做,直到它失败并显示错误

  

元素不可交互

pickupurl = 'https://firehouse.alohaorderonline.com/StartOrder.aspx?SelectMenuType=Retail&SelectMenu=1000560&SelectSite=1291'

driver = webdriver.Chrome('d:\\chromedriver\\chromedriver.exe')
driver.implicitly_wait(80)
driver.get(pickupurl)



button = driver.find_elements_by_xpath('//*[@id="ctl00_ctl00_PickupButton"]')
button.click()

代码看起来像是在定位“元素”时定位元素一样。

我尝试使用driver.execute_script来执行onclick =属性,但这也无济于事。

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

使用WebDriverWaitexpected_conditions是一个好习惯!

请参见explicit-waits

这对我有用:

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

pickupurl = 'https://firehouse.alohaorderonline.com/StartOrder.aspx?SelectMenuType=Retail&SelectMenu=1000560&SelectSite=1291'
driver = webdriver.Chrome('d:\\chromedriver\\chromedriver.exe')
driver.get(pickupurl)
wait = WebDriverWait(driver, 10)
pickup_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@id='btnPickupDiv']/div[@class='Button']")))

pickup_button.click()
loacter = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "AddressZipLabelDiv")))
driver.quit()

您可能与find_elements_by_xpath有关的问题应该在没有find_element_by_xpath的情况下使用s ...

答案 1 :(得分:3)

以下对我有用的

from selenium import webdriver

d = webdriver.Chrome()
url = 'https://firehouse.alohaorderonline.com/StartOrder.aspx?SelectMenuType=Retail&SelectMenu=1000560&SelectSite=01291'
d.get(url)
d.execute_script('document.getElementById("ctl00_ctl00_Content_Content_btnPickup").click();')

@Andersson的有用警告

通过execute_script执行的

element.click()并不会真正引起点击,而只是触发元素(链接,输入,按钮等)的onclick动作。因此,如果您使用这种方法进行网络测试,则可能会错过大量的错误