Python Selenium.无法定位元素



我已经尝试了几个小时从网站上未知数量的元素中提取文本。我上传了两张图片,这样你就可以看到元素的相似之处来识别它们。例如,它们具有相同的类名。黑色下划线的文本基本上就是我想要提取的文本。

我甚至还没有到提取文本的步骤,因为我甚至找不到元素。

这是我尝试过的一件事:

a=driver.find_elements_by_class_name("pooVf")
print(a)

我得到的结果是"[]"。

我也尝试过使用css选择器

a=driver.find_elements_by_css_selector("a.pooVf.prDW")
print(a)

还得到了"[]"。

我不知道如何将html代码添加为文本。我每次尝试都没用。

您是否尝试使用函数"text";?

driver.find_elements_by_css_selector(".....").text

您是否尝试过使用元素的XPath而不是其CSS选择器或类名?我本想留下来作为评论,但我没有足够的声誉。

你能尝试使用吗

driver.find_element_by_css_selector("a.pooVf.prDW")

代替

driver.find_elements_by_css_selector("a.pooVf.prDW")

可能性:动态添加元素

由于延迟后在浏览器中手动检查DOM时该元素存在,但Selenium抱怨找不到它,因此我怀疑该元素是由JavaScript动态添加的。Selenium有处理这种情况的工具。查看他们的等待文档。

如今,大多数网络应用程序都在使用AJAX技术。当浏览器加载页面时,该页面中的元素可能会以不同的时间间隔加载。这使得定位元素变得困难:如果DOM中还没有元素,则定位函数将引发ElementNotVisibleException异常。使用等待,我们可以解决这个问题。等待在执行的操作之间提供了一些间隙——主要是定位元素或对元素进行任何其他操作。

一个选项是添加以下行,使所有find方法在放弃之前等待几秒钟:

driver.implicitly_wait(5) # seconds

不要让延迟太长,因为如果元素真的不存在,你不想永远等待。使用Selenium的wait功能比time.sleep更好。一旦元素存在,就没有必要等待,但sleep无法知道何时会发生这种情况,而对于implicitly_wait,只要元素可用,代码就应该立即返回。

可能性:不同的会话/cookie

也许你正在寻找的元素取决于你的非无头Chrome连接所特有的信息(cookie、本地存储等(,而无头Chrome不可用。这就像使用两种不同的浏览器。尝试使用Chrome的隐身模式,看看在检查DOM时是否还能找到元素。如果这再现了问题(元素丢失(,那么这意味着您需要在Selenium代码中添加额外的行,以复制您在浏览器中所做的操作:也许使用登录页面上的凭据登录,单击一些上传按钮,等等。所有这些操作都需要编码到你的无头版本中——它们不能依赖于你在非无头Chrome中手动执行的操作。即便如此,您也可能难以使用所写的选择器:pooVft3RpAeprDWRgstwe看起来都是非常独特、不可预测的字符串。如果您的操作序列(登录、上传(每次都会产生不同的字符串,那么您需要以不同的方式找到这些元素。也许可以更可靠地找到它们的父元素之一。

相关内容

  • 没有找到相关文章

最新更新