@Arslan96py
Python и PHP программист

Python Selenium почему не выполняет код после driver.get()?

Пишу код который проверяет действительность ссылок, он переходит по страницам и в зависимости от сайта проверяет условия

При переходе по ссылкам некоторых сайтов драйвер страницу прогружает а код дальше не выполняет и просто стоит пока не перезагружу страницу через F5 либо пока не завершу выполнение

Код писал на скорую руку не судите строго, спасибо!:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import pandas as pd
from datetime import *
import time
import os, sys

driver_path = ''
path = os.getcwd()
os.chdir(path)

option = Options()
option.add_experimental_option("excludeSwitches", ["enable-logging"])
option.add_argument("--disable-infobars")
driver_path = 'Здесь путь до драйвера'

class Find:

    @staticmethod
    def x(xpath):
        return driver.find_element(By.XPATH, xpath)

Find = Find()

links_to_check = []

try:
    with open(r'Файл_с_ссылками.csv', 'r', encoding="utf-8") as file:
        for i in file.readlines()[1:]:
            if i!='\n':
                links_to_check.append(i.replace('\n',''))
except:
    print('\nНе удалось открыть файл.')
    sys.exit()

print(links_to_check)

uncorrect_links = []
# -------------------------------- #

def check(links_to_check):

    for i in links_to_check:
        print('\n',  i)
        if i != '':
            time.sleep(2)
           """ Ошибка здесь, после get останавливается на определённых ссылках даже до if не доходит """
            driver.get(i)
            time.sleep(2)

# -------------------- 1 ----------------- # 
            """ Это условия для ссылок 1 (на пару из которых код стоит) """
            for _ in range(3):
                try:
                    if '1' in i:
                        print('1')

                        if "Объявление удалено" in driver.title:
                            uncorrect_links.append(i)
                            print('Uncorrect')
                            break
                        else:
                            break
                except:
                    driver.refresh()

# -------------------- 2----------------- #

        if '2' in i:
            print('2')
            if "Страница не найдена" in driver.title:
                uncorrect_links.append(i)

            else:
                try:
                    text_to_take = Find.x('//p[@class="msg-error-line"]').text
                    if 'Завершена' in text_to_take:
                        uncorrect_links.append(i)
                except:
                    continue

# ----------------- 3-------------------- #

        if '3' in i:
            print('3')
            if 'Ошибка' in driver.title:
                uncorrect_links.append(i)
            else:
                continue

# ----------------- 4 -------------------- #

        if '4' in i:
            print('4')
            try:
                if 'Объявление не найдено' in Find.x('/html/body/div/div/div/main/section/h1').text:
                    uncorrect_links.append(i)
            except:
                continue


        else:
            continue
# ------------- Start -------------- #

def to_xlsx():
    try:
        df = pd.DataFrame(
            {"Дата": date.today().strftime('%d.%m.%Y'), "Web ссылка": uncorrect_links})
        df.index += 1
        df.to_excel(f'Uncorrect_Links_{len(uncorrect_links)}.xlsx')
    except Exception as e:
        print(e)

def start():
    global driver

    driver = webdriver.Chrome(
        executable_path=driver_path,
        options=option)

    check(links_to_check)

    driver.quit()
    to_xlsx()

start()
  • Вопрос задан
  • 289 просмотров
Пригласить эксперта
Ответы на вопрос 1
@newPsevdonim
Python разработчик
Ожидание элемента в selenium реализуется двумя способами явным и неявным ожиданием. Вам проще использовать неявное ожидание (implicit wait)

driver.implicit_wait(60)

Делается это после создания драйвера и вроде бы по умолчанию этот параметр равен 0
Ответ написан
Ваш ответ на вопрос

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

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