在Python中使用XPATH和Selenium选择网页上的所有可见文本会将所有文本作为一个WebElement返回



我想选择网页下的所有可见文本,其中DOM中每个元素/节点的文本都是分开的。

PATH = "C:Program Files (x86)chromedriver.exe"
chrome_options = Options()
chrome_options.add_argument("--start-maximized") # must! else results are affected
driver = webdriver.Chrome(PATH, chrome_options=chrome_options)
driver.get("https://www.tesco.com/groceries/en-GB/products/291496210")
elements = driver.find_elements_by_xpath("//html/body//*[@class!='visually-hidden']")
# above xpath expression finds all elements under body that do not have the class of 'visually-hidden'
print(elements)

我面临的问题是,elements列表中返回的第一个元素是整个网页的全部文本,而我希望满足XPATH表达式的每个节点的文本都是一个单独的WebElement,以便我自己获得与它相关的属性。

请帮帮我,谢谢!

您应该遍历所有元素,从每个元素中获取文本并打印出来,如下所示:

driver.get("https://www.tesco.com/groceries/en-GB/products/291496210")
elements = driver.find_elements_by_xpath("//html/body//*[@class!='visually-hidden']")
for element in elements:
print(element.text)

此外,在获取所有元素并提取其文本之前,您应该添加一些延迟以使页面完全加载
最简单但不是推荐的方法是增加睡眠,比如:

driver.get("https://www.tesco.com/groceries/en-GB/products/291496210")
time.sleep(10)
elements = driver.find_elements_by_xpath("//html/body//*[@class!='visually-hidden']")
for element in elements:
print(element.text)

最新更新