Селен клик по идентификатору - PullRequest
1 голос
/ 13 июня 2019

Я следовал за кодом здесь: Selenium Python get_element по идентификатору с ошибкой

но он все еще не работает

Вот мой код

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 Ответ

2 голосов
/ 13 июня 2019

Время истекло, потому что элементы не могут быть найдены.Если вы посмотрите на html вручную, вы увидите, что идентификаторы отличаются от того, что вы используете.

Например, у вас есть:

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

Посмотрите на значение идентификатора.Это строчная буква L вместо 1 в части «ctl100» идентификатора.Проверьте остальные и просто скопируйте и вставьте HTML-идентификаторы в свой код.

Это работает для первых 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...