@kopelev2000

Надо авторизовываться на сайте с разных аккаунтов и парсить тайтлы курсов (которые есть на данных аккаунтах), как осуществить?

Суть вопроса в чём:
1)Скрипт авторизуется, заходит в раздел с курсами и далее извлекает всё, что надо, записывая всё это в .txt файл.
2)Надо сделать так, чтобы скрипт брал логин и пароль из .txt файла (логин и пароль располагаются там, вот так:
login:password
login_1:password_1
login_n:password_n), парсил всё что надо, потом переходил на новый акк, вслучае возникновения ошибки, аккаунт пропускался и скрипт переходил на новый аккаунт.
Грубо говоря, 1-й этап был успешно выполнен, а вот на счёт второго всё не совсем хорошо. Не как не могу ничего придумать. Заранее спасибо
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time

print("ENTER MAIL: ")
mail = input()
print("ENTER PASSWORD: ")
pas = input()

f = open('udemy_titles','w', encoding='utf8')
f.write("USERNAME: ")
f.write(mail + "\n")
f.write("PASSWORD: ")
f.write(pas + "\n")

def parse_pagination(driver):
    try:
        ul_pagination = driver.find_element_by_css_selector("ul.pagination.pagination-expanded")
        li_pagination = ul_pagination.find_elements_by_css_selector("li")[-2]
        count_page = int(li_pagination.find_element_by_css_selector("a").text)
        urls = []
        for i in range(2, count_page + 1):
            urls.append("https://www.udemy.com/home/my-courses/learning/?p=" + str(i))
            time.sleep(2)
        return urls
    except:
        pass

def parse_list(driver):
    try:
        div_card_wrapper = WebDriverWait(driver, 10).until(
             EC.visibility_of_element_located((By.CSS_SELECTOR, "div.card-wrapper")))
        div_cards = div_card_wrapper.find_elements_by_css_selector("div.card.card--learning")
        for div_card in div_cards:
            a = div_card.find_element_by_css_selector("a.card--learning__details > div > strong")
            name = a.text
            print(name)
            f.write(name + "\n")
    except:
        pass

driver= webdriver.Firefox()
driver.get('https://www.udemy.com')
print("\nGOT URL\n")
time.sleep(5)

driver.find_element_by_xpath("//button[@data-purpose='header-login']").click()
print("OPEN LOGIN FORM\n")
time.sleep(5)

webdriver.ActionChains(driver).move_by_offset(570, 295).click().send_keys(mail).perform()
print("PRINT MAIL\n")
time.sleep(5)

webdriver.ActionChains(driver).move_by_offset(100, 65).click().send_keys(pas).perform()
print("PRINT PASSWORD\n")
time.sleep(5)

webdriver.ActionChains(driver).move_by_offset(0, 60).click().perform()
print("AUTORIZATION\n")
time.sleep(5)

driver.find_element_by_xpath("//a[@data-purpose='my-courses']").click()
print("GO TO URL\n")
time.sleep(5)

try:
    div  = driver.find_element_by_xpath("//div[@class='pager-label']").text
    div_1 = div.split(" ")[-2]
    f.write("TOTAL COURSES: " )
    f.write(div_1 + "\n")
except:
    pass

try:
    parse_list(driver)
    urls = parse_pagination(driver)
    for url in urls:
        driver.get(url)
        parse_list(driver)
except:
    pass

f.close()

driver.close()
time.sleep(2)
  • Вопрос задан
  • 201 просмотр
Решения вопроса 2
dimonchik2013
@dimonchik2013
non progredi est regredi
Не как не могу ничего придумать.


из файла прочитать не можешь?
Ответ написан
@taktik
Sr. QA automation | SDET
Не понятно, что именно не получается. Если вычитать из файла, то элементарно:
file = open("d:/login_pass_file.txt", 'r')
login_pass_dict = dict()
for x in [line.strip().split(':') for line in file]:
    login_pass_dict.update({x[0]: x[1]})

Дальше просто проходишь циклом по словарю, внутри выполняешь свой код:
for login, password in login_pass_dict.items():
    # тут твой код
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 03:54
1500 руб./за проект
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект