【发布时间】:2020-11-17 08:48:38
【问题描述】:
我正在编写一个 selenium webscraper,我遇到了一个问题,Selenium 告诉我在网页上没有找到这样的元素,但是该元素应该被点击并被点击。据我了解,这应该是不可能的,因为没有找到该元素。这是我要抓取的网页 [https://www.sreality.cz/adresar/mm-reality-praha-nove-mesto/1019]。我正在尝试抓取顶部的公司名称、按钮中的报价数量、地址、电话号码和电子邮件。事情是为了查看电话号码和电子邮件地址,您首先必须单击文本,然后它就会被显示出来。我现在尝试的方法是找到元素 - 单击它 - 将信息保存到变量中。据我了解,这是发生错误的地方。但是当我运行代码时,元素被显示出来,所以点击肯定发生了,但是程序结束并告诉我找不到元素。这是我遇到问题的代码:
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
import time
import csv
path = "/home/user/Projects/Scraper/chromedriver"
driver = webdriver.Chrome(path)
driver.get("https://www.sreality.cz/adresar/mm-reality-praha-nove-mesto/1019")
wait = WebDriverWait(driver, 10)
with open('SRealityDetails.csv', 'w', newline='') as f:
thewriter = csv.writer(f)
while True:
try:
information_list = wait.until(ec.presence_of_all_elements_located((By.CLASS_NAME, "ng-binding")))
for item in information_list:
title = driver.find_element_by_xpath("""/html/body/div[2]/div[1]/div[2]/div[2]/div[4]/div/div/div/h1/span[2]""")
offers = driver.find_element_by_css_selector("a.switcher.ng-binding.ng-scope span.ng-binding.ng-scope")
addresses = driver.find_element_by_xpath("""/html/body/div[2]/div[1]/div[2]/div[2]/div[4]/div/div/div/div[3]/div/div[1]/table[1]/tbody/tr[1]/td""")
phone_number = driver.find_element_by_css_selector("button.value.link.ng-binding.ng-scope")
phone_number.click()
phone_number = driver.find_element_by_css_selector("span.phone.ng-binding")
email = driver.find_element_by_css_selector("button.value.link.ng-binding")
email.click()
email = driver.find_element_by_css_selector("a.value.link.ng-binding")
print(title, " ", offers, " ", addresses, " ", phone_number, " ", email)
time.sleep(10)
except Exception as e:
print(e)
break
这是错误输出:
消息:没有这样的元素:无法找到元素:{“method”:“css 选择器","选择器":"button.value.link.ng-binding.ng-scope"}
(会话信息:chrome=83.0.4103.116)进程以退出代码 0 结束
不幸的是,一旦“没有找到这样的元素”错误通过,程序就不想继续了。我无法弄清楚为什么会发生此错误,如果有人可以向我解释这是如何发生的以及我做错了什么,我将不胜感激。感谢任何人。
【问题讨论】:
-
发布完整的回溯,以便我们可以看到哪一行引发了异常。
-
遗憾的是,回溯不包含导致异常的行。似乎 Selenium 只在某些情况下告诉你这条线。然而,这是我得到的信息:消息:没有这样的元素:无法找到元素:{“method”:“css selector”,“selector”:“button.value.link.ng-binding.ng-scope”} (会话信息:chrome=83.0.4103.116)进程以退出代码 0 结束
-
phone_number = driver.find_element_by_css_selector("button.value.link.ng-binding.ng-scope") 是问题所在。您没有使用任何等待,因此它可能无法获取元素。
标签: python python-3.x selenium selenium-webdriver webdriver