Найдите число в теге html с помощью Selenium - PullRequest
0 голосов
/ 10 июля 2020

Я создаю парсинг определенной страницы. У меня проблема в том, что вам нужно щелкнуть указанный элемент c, который имеет onclick = "phoneContactFromAdList (353966494, 0);". Вдоль этой же строки есть класс под названием def-button .

Проблема в том, что, поскольку есть несколько кнопок продуктов, число «353966494» постоянно меняется. Какие у меня есть варианты, чтобы иметь возможность получать список, содержащий эти числа, чтобы заменять их каждый раз, когда мне нужно нажимать кнопку? Это селен с 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)
   

Я хочу получить доступ к элементам страницы https://www.milanuncios.com/coches-de-segunda-mano-en-cadiz/ с селеном Python. Но почему-то не позволяет. Я намерен щелкнуть элемент «Вызов», а затем, если страница запрашивает его, щелкнуть там, где меня спрашивают, действительно ли я хочу просмотреть данные, и сохранить эти данные в переменной. Это со всеми элементами страницы, но почему-то не позволяет мне получить доступ к данным. Я уже много способов перепробовал. Самая частая ошибка, которую он показывает мне, - это selenium.common.exceptions.NoSuchElementException: Сообщение: такого элемента нет: невозможно найти элемент: {"method": "xpath", "selector": "// a [@ onclick = 'phoneContactFromAdList (X, 0); '] "} (Информация о сеансе: chrome = 83.0.4103.116). Если кто-нибудь может мне с этим помочь, я был бы очень признателен.

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Вы можете использовать метод XPath contains для атрибута, чтобы найти вашу stati c часть вашего идентификатора, тогда вы получите объект

Попробуйте:

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

Элемент поиска будет работать если есть один объект, который соответствует (но терпит неудачу, если их много). Элементы поиска найдут все, что соответствует, и вы сможете интегрировать через них.

[изменить - теперь у меня есть ссылка, я могу быть больше точно!]

Первая часть вашего кода успешно получает динамические c данные (число).

Подайте это в этот xpath:

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

Обратите внимание, что с классом X5 вы получаете r XXXX - этому объекту нужен только номер, поэтому вам нужно будет выполнить некоторые операции со строкой, чтобы сохранить только числовые символы.

Этот XPath найдет родительский контейнер и выберет соответствующий объект для щелчка.

Когда я смотрю на ссылку, генерируются уникальные объекты:

введите описание изображения здесь

0 голосов
/ 10 июля 2020

Если вы можете добавить дополнительную информацию об элементе и его местонахождении, но я думаю, что копирование класса или использование метода 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), вы должны попробовать.

...