Странное поведение с селеном при соскобе - PullRequest
0 голосов
/ 02 мая 2019

У меня есть скрипт, который извлекает URL-адреса из веб-страницы, загружает каждую ссылку и извлекает данные, которые мне нужны.Однако после дальнейшего расследования я обнаружил, что Selenium не открывает ссылку, как следует, и дублирует информацию.например, следующим образом:

link 1 - Title:ABC <-- within link, extract 123
link 2 - Title:DEF <-- within link, extract 456
link 3 - Title:GHI <-- within link, extract 789
link 4 - Title:JKL <-- within link, extract 000

вывод должен быть следующим:

ABC, 123
DEF, 456
GHI, 789
JKL, 000

однако вывод, который я получаю, выглядит следующим образом:

ABC, 123
ABC, 123
GHI, 789
JKL, 000

такое поведение кажетсябыть случайным.

Вот код

elems = driver.find_elements_by_xpath(alllinks)
for elem in elems:
    links.append(elem.get_attribute("href"))
    for url in links:
        try:
            time.sleep(0.5) 
            driver.get(url) 
            time.sleep(2)

кто-нибудь испытывает этот тип поведения?

РЕДАКТИРОВАТЬ: ОБНОВЛЕНИЕ:

Обновление на этомЯ только 3 раза просмотрел URL и сравнил результаты друг с другом.URL-адреса являются уникальными и извлекаются в зависимости от сайта.Из того, что я вижу, Selenium загружает URL-адреса из массива.

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

думал, что предоставлю ответ на мой вопрос. Это была не проблема с Selenium, а проблема с моим кодом. У меня есть пробный / исключающий кодовый блок, который будет выполняться, если элемент существует, если он существует, к переменной добавляется извлеченный текст. однако, если элемент не существует, переменная будет содержать текст из предыдущего цикла и записать его в файл.

Чтобы обойти это, у меня есть del в конце цикла for - могут быть и другие более элегантные способы сделать это, но это решит мою проблему.

0 голосов
/ 02 мая 2019

Если я правильно понимаю ваш запрос, вы должны загрузить последнюю ссылку, а не повторять каждый раз каждую ссылку.

elems = driver.find_elements_by_xpath(alllinks)
previousTitle = ''
for elem in elems:
    url = elem.get_attribute("href")
    links.append(url)
    driver.get(url) 
    # make sure to wait until the title is changed (no issue until 2 urls have same title)
    wait.until_not(EC.title_is(previousTitle)) 
    previousTitle = driver.title
...