@TechNOIR

Selenium+Python. Не находит элемент и выходит из скрипта. В чем причина?

Добрый день. Имеется скрипт, который берет проксик из проксилиста,идет на страницу и выполняет клик и так пока не пройдет все проксики. Есть условие таймаута страницы. Но если вдруг элемент не находится то скрипт завершается,а нужно чтобы переходил на следующий проксик в проксилисте,пока все не пройдет. Подскажите как это сделать? Еще одно условие?
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
import time
with open('proxy.txt', 'r') as file:
    proxy_list = [a.strip() for a in file.readlines()]
for proxy in proxy_list:
    service_args = [
        '--proxy={}'.format(proxy),
        '--proxy-type=http',
        ]
    browser=webdriver.PhantomJS(service_args=service_args)
    browser.set_page_load_timeout(20)
    try:
        print("TRY PROXY")
        browser.get('http://nnmclub.to')
        current = browser.window_handles[0]
        print ("Page is loaded")
        print ("Click")     
        browser.find_element_by_xpath("//a[contains(@href,'marketgid')]").click()
        print ("Clicked")
        newWindow = [window for window in browser.window_handles if window != current][0]
        browser.switch_to.window(newWindow)
        print("Done.")
    except TimeoutException:
        print("cant load")
    browser.get_screenshot_as_file('po{}.png'.format(proxy))
browser.quit()
  • Вопрос задан
  • 1079 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Araben
from selenium.common.exceptions import NoSuchElementException
try:
    elem=driver.find_element_by_xpath("//a[contains(@href,'marketgid')]") 
except NoSuchElementException:
    print "Missing"
else:
    elem.click()
    и что там дальше
Ответ написан
Revencu
@Revencu
Я заметил что LXML парсинг работает быстрее Selenium.
И если элемент отсутствует на странице то Selenium ещё и притормаживает сильно.
Решением может быть:
...
from lxml import html
...
code=driver.page_source
tree=html.fromstring(code)
el=tree.xpath("//a[contains(@href,'marketgid')]")
if len(el)>0:
    elem=driver.find_element_by_xpath("//a[contains(@href,'marketgid')]").click()
else:
    ....
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы