硒按ID点击

时间:2019-06-12 22:05:42

标签: python selenium

我在这里遵循以下代码:Selenium Python get_element by ID failing

但仍然无法正常工作

这是我的代码

from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

BLACKBERRY_UA = "Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.346 Mobile Safari/534.11+"
opts = Options()
opts.add_argument("user-agent={0}".format(BLACKBERRY_UA))

root_url = 'http://www3.hkexnews.hk/listedco/listconews/advancedsearch/search_active_main.aspx'
ticker = '700'

driver = webdriver.Chrome(chrome_options=opts)
driver.get(root_url)

# 1 enter ticker
stock_code = WebDriverWait(driver, 5).until(ec.element_to_be_clickable((By.ID, "ct100_txt_stock_code")))
stock_code.click()
stock_code.send_keys(ticker)

#2 click on "Headline Category" radio button
button = WebDriverWait(driver, 5).until(ec.element_to_be_clickable((By.ID, "ct100_rbAfter2006")))
button.click()

#3 choose "Announcements and Notices" from drop down
driver.find_element_by_xpath("//select[@id='ct100_sel_tier_1']/option[text()='Announcements and Notices']").click()

# 4 click on "Search"
driver.find_element_by_xpath('//a[@href = \\"javascript: if (preprocessMainForm() == true )  document.forms[0].submit()"\\]').click()  # click on search buttom

我已经测试了这4个步骤中的每个步骤,但没有一个起作用。我也尝试过By.NAME,但仍然无法使用。我收到TimeoutException。不确定硒是否在寻找元素,为什么会超时?

1 个答案:

答案 0 :(得分:2)

正在超时,因为找不到元素。如果您手动查看html,您会发现ID与您使用的ID不同。

例如,您有

stock_code = WebDriverWait(driver, 5).until(ec.element_to_be_clickable((By.ID, "ct100_txt_stock_code")))

应为:

stock_code = WebDriverWait(driver, 5).until(ec.element_to_be_clickable((By.ID, "ctl00_txt_stock_code")))

查看ID值。它是小写字母L,而不是ID的“ ctl100”部分的1。检查其他内容,然后将其复制并粘贴到html ID中。

这适用于前3个步骤,但对于第4步,请使用以下步骤:

driver.find_element_by_xpath("/html//form[@id='aspnetForm']/table//a[@href='javascript: if (preprocessMainForm() == true )  document.forms[0].submit();']").click()  # click on search buttom