gpt4 book ai didi

python - Webdriver/Selenium : How to find element when it has no class name, id,还是 css 选择器?

转载 作者:行者123 更新时间:2023-11-28 22:43:07 26 4
gpt4 key购买 nike

每个“7 件装”搜索结果 here包含右侧下方每个条目的地址和电话号码,因此:

enter image description here

对于每个,我想提取 (i) 地址和 (ii) 电话号码。问题是,这些元素是如何在 HTML 中定义的:

<div style="width:146px;float:left;color:#808080;line-height:18px"><span>Houston, TX</span><br><span>United States</span><br><nobr><span>(713) 766-6663</span></nobr></div>

所以没有我可以使用find_element_by*()的类名、css选择器或id,我不知道链接文本,所以我不能使用find_element_by_partial_link_text(),WebDriver不提供据我所知,一种按风格查找的方法。我们如何解决这个问题?对于不同的查询,我需要每次都能可靠地为每个搜索结果提取正确的数据。

绑定(bind)到 WebDriver 的语言是 Python。

最佳答案

至少有两个关键的东西可以依赖:id="lclbox" 的容器框和对应于每个结果的 class="intrlu" 的元素项目。

如何从每个结果项中提取地址和电话号码可能会有所不同,这里有一个选项(绝对不漂亮)涉及通过每个 span 元素文本的正则表达式检查来定位电话号码:

import re

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver


driver = webdriver.Chrome()
driver.get('https://www.google.com/?gws_rd=ssl#q=plumbers%2Bhouston%2Btx')

# waiting for results to load
wait = WebDriverWait(driver, 10)
box = wait.until(EC.visibility_of_element_located((By.ID, "lclbox")))

phone_re = re.compile(r"\(\d{3}\) \d{3}-\d{4}")

for result in box.find_elements_by_class_name("intrlu"):
for span in result.find_elements_by_tag_name("span"):
if phone_re.search(span.text):
parent = span.find_element_by_xpath("../..")
print parent.text
break
print "-----"

我很确定它可以改进,但希望它能给你一个起点。打印:

Houston, TX
(713) 812-7070
-----
Houston, TX
(713) 472-5554
-----
6646 Satsuma Dr
Houston, TX
(713) 896-9700
-----
1420 N Durham Dr
Houston, TX
(713) 868-9907
-----
5630 Edgemoor Dr
Houston, TX
(713) 665-5890
-----
5403 Kirby Dr
Houston, TX
(713) 224-3747
-----
Houston, TX
(713) 385-0349
-----

关于python - Webdriver/Selenium : How to find element when it has no class name, id,还是 css 选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31075506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com