当我运行下面的代码时,我得到selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="i0"]/input"}
(Session info: chrome=83.0.4103.97)
但是,在我的终端中,我可以访问所需的元素:
>>> steam_pressure_field = browser.find_element_by_xpath('//*[@id="i0"]/input')
>>> steam_pressure_field.get_attribute('value')
'0'
正如您在代码的注释部分所看到的,我已经尝试等待3秒的延迟,看看这是否会产生影响。但是,在做了几次之后,当我使用延迟时,页面停止加载(可能是一些反机器人功能?)
因此,我试图了解这里发生了什么,以及如何成功访问所需的字段。请问我有什么遗漏吗
顺便说一句,div
id似乎不是动态的
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
options = webdriver.ChromeOptions()
options.add_argument(f'user-agent={user_agent}')
browser = webdriver.Chrome(options=options)
url = 'https://www.tlv.com/global/US/calculator/superheated-steam-table.html?advanced=off'
# delay = 3
# try:
# wait = WebDriverWait(browser, delay)
# wait.until(EC.presence_of_element_located((By.ID, "body")))
# browser.get(url)
# print("Page is ready")
# except TimeoutException:
# print("Loading took too much time")
browser.get(url)
steam_pressure_field = browser.find_element_by_xpath('//*[@id="i0"]/input')
print(steam_pressure_field.get_attribute('value'))
要打印值0,必须为
visibility_of_element_located()
导出WebDriverWait,并且可以使用以下Locator Strategies之一:使用
CSS_SELECTOR
:使用
XPATH
:控制台输出:
注意:您必须添加以下导入:
相关问题 更多 >
编程相关推荐