我在这里遵循以下代码: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
。不确定硒是否在寻找元素,为什么会超时?
答案 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