下面的页面,https://www.zjzwfw.gov.cn/zjservice/front/index/page.do?webId=1,我想定位‘城乡居民养老保险参保登记’,然而,这个文本信息不在web源代码中,但是我可以正确地获得这个元素信息,我对此很好奇。守则如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
import chromedriver_autoinstaller
from selenium.webdriver.chrome.service import Service
from xpath_helper import xh, filter
chromedriver_autoinstaller.install('/Users/project/chromedriver')
options = webdriver.ChromeOptions()
options.add_argument('--headless')
browser = webdriver.Chrome(service=Service())
browser.get("https://www.zjzwfw.gov.cn/zjservice/front/index/page.do?webId=1")
#%%
el = xh.get_element(filter.value_contains(str('城乡居民养老保险参保登记')))
html1 = browser.find_element(By.XPATH,str(el))
html1.click() ## It runs correctly.发布于 2022-10-09 07:07:21
是的,您是对的,元素是在呈现后生成的。
有些元素是JavaScript生成的,因此在浏览器呈现之前可能不会轻易出现在源中。
有时,您可能会发现元素没有找到,因此您可能不得不等待,直到使用元素可见为止。
发布于 2022-10-09 07:19:13
通过应用browser.get()方法,Selenium将根据选定的页面加载策略等待加载页面。默认的页面加载策略是normal。根据此页面中的文档加载策略,WebDriver应该在导航之后等待文档就绪状态“完成”。
因此,您的问题的答案是是,在这种特殊情况下,Selenium将等待加载页面。
这并不取决于您使用什么定位器XPath、CSS选择器、ID或任何其他。
重要的是要理解,如果Selenium命令browser.find_element(By.XPATH,str(el))出现在其他命令之后,比如element.click() Selenium将而不是等待该元素的呈现,直到您使用WebDriverWait,比如wait.until(EC.element_to_be_clickable((By.ID, "the_id"))).click()
这是因为驱动程序隐式等待的默认值是0 (文件)。
https://stackoverflow.com/questions/74002705
复制相似问题