【问题标题】:Find a number in a html tag with Selenium使用 Selenium 在 html 标签中查找数字
【发布时间】:2020-07-10 15:46:10
【问题描述】:

我正在创建某个页面的网页抓取。我遇到的问题是您必须单击具有onclick = "phoneContactFromAdList (353966494, 0);" 的特定元素。沿着这条线,还有一个名为 def-button 的类。

问题在于,由于有多个产品按钮,数字“353966494”一直在变化。我必须有哪些选项才能获得包含这些数字的列表,以便在每次我必须单击按钮时替换它们?它是 Selenium 和 Python。

已编辑 我意识到我遇到的问题是这个。 (它不允许我删除帖子,所以我将在此处添加它。

我的代码是这样的。

import random
from time import sleep
from selenium import webdriver

driver = webdriver.Chrome('./chromedriver.exe')


lenPaginas = driver.find_element_by_class_name("adlist-paginator-summary")

codigo_de_elementos = driver.find_elements_by_class_name = ('X5')
print(codigo_de_elementos)
print("%s max paginas = %s" % (lenPaginas.text, lenPaginas.text.split(" ")[3]))

for i in range(int(lenPaginas.text.split(" ")[3]) + 1): # Voy a darle click en cargar mas 3 veces
#Para conseguir los identificadores de los botones de contacto javascripts
    print(i)
    for codigosAutos in codigo_de_elementos:
        sleep(5)
        primeraParteDatos = driver.find_element_by_xpath("//a[@onclick='phoneContactFromAdList(%s, 0);']" % codigosAutos)
        sleep(random.uniform(4.0,8.0))
        print(primeraParteDatos)
   

我想要做的是使用 selenium Python 访问页面https://www.milanuncios.com/coches-de-segunda-mano-en-cadiz/ 的元素。但由于某种原因,它不允许我。我的意图是单击“调用”元素,然后,如果页面要求,单击它询问我是否真的想查看数据的位置,并将该数据存储在变量中。这包含页面的所有元素,但由于某种原因它不允许我访问数据。我已经尝试了很多方法。它显示给我的最常见错误是 selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method": "xpath", "selector": "// a [@ onclick = 'phoneContactFromAdList (X, 0);']"} (会话信息:chrome = 83.0.4103.116)。 如果有人可以帮助我,我将不胜感激。

【问题讨论】:

  • 向我提供有关您的代码的更多上下文,以便任何人都可以轻松地帮助您:)
  • 你的 xpath 中有一个分号。这是预期的吗?

标签: html python-3.x selenium selenium-webdriver web-scraping


【解决方案1】:

如果您可以添加有关元素及其位置的更多信息,但我认为复制类或使用 XPath 方法可能会很有用。

from selenium import webdriver
driver = webdriver.YourDriverOfChoice(executable_path="Full path to the browser drivers located")
driver.get("site you're looking for")
elem_you_looking = driver.find_element_by_id("elements id")

或者您可以使用不同的方法来查找元素,例如

XPath、类名、CSS_selector、链接文本、部分链接文本

顺便说一句,欢迎堆栈;我也使用 Selenium 进行抓取,但我发现它不是很强大,有更好的模块用于抓取,例如 b4s(Beautiful Soup),你应该试一试。

【讨论】:

  • 嗨!总之,我需要的是能够找到我上面留下的标签内的数字,只知道它是伴随的。例如,能够知道标签的其余部分只知道它是由 phoneContactFromAdList 加上一个数字组成的。
【解决方案2】:

您可以在属性上使用 XPath contains 方法来查找标识符的静态部分,然后将获取对象

试试:

.find_elements_with_xpath ("//*[contains(@onclick,'phoneContactFromA')]") 

如果有一个匹配的对象,则查找元素将起作用(但如果有很多则失败)查找元素将找到所有匹配的对象,您可以通过它们进行整合。

[编辑 - 现在我有了链接,我可以更准确!]

您的代码的第一部分成功获取动态数据(数字)。

将其输入此 xpath:

//div[contains(@id,'350094913')]//a[contains(@onclick,'phoneContactFromAdList')]

请注意,使用 X5 类您检索 rXXXX - 此对象只需要数字,因此您需要进行一些字符串操作以仅保留数字字符。

那个 XPath 会找到父容器为点击选择相关的对象。

当我查看链接时,会生成独特的对象:

【讨论】:

  • 根据提供的额外信息进行了更新-感谢@juan
猜你喜欢
  • 2021-10-20
  • 2021-01-25
  • 2020-05-24
  • 2021-02-09
  • 2021-11-17
  • 2013-09-18
  • 2016-03-22
  • 2012-04-22
  • 2021-06-16
相关资源
最近更新 更多