提问人:Eric Lehmann 提问时间:9/12/2023 最后编辑:ShawnEric Lehmann 更新时间:9/12/2023 访问量:60
无法使用 Python Selenium 获取元素 find_element(By.CSS_SELECTOR)
Can't get element with Python Selenium find_element(By.CSS_SELECTOR)
问:
我无法在要抓取的页面中获取特定元素。内容被包裹在一个奇怪的标签中,不确定它是否是 iframe。我也尝试过CSS_SELECTOR,但是在上述标签之后出现的任何内容都会引发错误。
我要抓取的页面:https://connect.echobotsales.de/#/company/YwOwE8kYmN
我在做什么:
try:
telephone_element = driver.find_element(By.XPATH, "//dynamicelements/div[2]/div[2]/div[2]/div[2]/span/a").text
print(telephone_element)
except Exception as e:
print("error", e)
我收到的错误:
error Message: no such element: Unable to locate element: {"method":"xpath","selector":"//dynamicelements/div[2]/div[2]/div[2]/div[2]/span/a"}
(Session info: headless chrome=113.0.5672.63); For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
答:
1赞
qatesterbecomingprogrammer
9/12/2023
#1
虽然我使用了您提供的 Xpath,但它向我显示了确切的电话号码。表示您的 xpath 是有效的。 您可以先使用 wait 与该元素进行交互。人们只使用一个等待,但我使用 2 个安全方面,使用 2 个等待来确保该元素很有吸引力。
因此,您可以使用以下方法:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
telephone_xpath = "//dynamicelements/div[2]/div[2]/div[2]/div[2]/span/a"
wait = WebDriverWait(driver, 10)
wait.until(
EC.presence_of_element_located((By.XPATH, telephone_xpath))
wait.until(
EC.element_to_be_clickable((By.XPATH, telephone_xpath))
try:
telephone_element = driver.find_element(By.XPATH, telephone_xpath).text
print(telephone_element)
except Exception as e:
print("error", e)
评论
0赞
Eric Lehmann
9/12/2023
嗯。。。仍然收到此错误,我相信当它找不到元素时会发生这种情况?错误消息:堆栈跟踪:#0 0x55a6ff9e2133 <未知> #1 0x55a6ff716966 <未知> #2 0x55a6ff7530dc <未知> .....#18 0x7f78ff4bf402 <未知>
0赞
qatesterbecomingprogrammer
9/12/2023
我运行了代码,它从打印报表中给了我电话号码。
0赞
Eric Lehmann
9/13/2023
谢谢,它最终奏效了。感谢您抽出宝贵时间解释!
1赞
Shawn
9/12/2023
#2
检查下面的代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://connect.echobotsales.de/#/company/YwOwE8kYmN")
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//dynamicelements/div[2]/div[2]/div[2]/div[2]/span/a")))
print(element.text)
print(element.get_attribute("innerText"))
控制台输出:
+49 89996400
+49 89996400
Process finished with exit code 0
另一种选择:虽然上面使用的 XPath 表达式是正确的,但您也可以尝试使用下面的 XPath 表达式来查找所需的元素。请参阅以下代码行:
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//span//a[contains(@href,'tel')]")))
评论
0赞
Eric Lehmann
9/13/2023
谢谢,它工作得很好。感谢您抽出宝贵时间:)
评论
//span[@ng-if='!company.phoneIsBlacklisted']/a
css selecter