Как читать строку .txt файл построчно и использовать его для входа в тонны учетных записей (Python, Selenium) - PullRequest
2 голосов
/ 25 апреля 2019

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

Ответы [ 3 ]

2 голосов
/ 26 апреля 2019

Вы почти у цели.

Вы должны войти в систему и выполнить все задачи, которые вам нужно выполнить, и выйти из системы в цикле, где вы пересекаете линии.

В цикле for необходимо исправить отступ оператора send_keys. Python чувствителен к пространству.

Кроме того, вы передаете список lines в send_keys, что приведет к другой ошибке. Передайте переменную l, поскольку она содержит элемент из списка.

Попробуйте:

from selenium import webdriver
browser = webdriver.Chrome('C:\\Users\klime\Desktop\Python Palai Bot\chromedriver')


with open('acc.txt') as f:
    lines = f.readlines()

for l in lines:
    #if logout brings you to the login page then you could do this before the loop
    browser.get('https://www.palai.org/u/sign_in') 
    #here l is the object from the list. so use l instead of lines
    browser.find_element_by_id('user_email').send_keys(l)
    browser.find_element_by_id('user_password').send_keys('yourpassword')
    #Do your task
    #logout

-----------------

Edit: Как я уже говорил, python чувствителен к пространству. Вы должны поставить отступы, чтобы ваш код работал.

Кроме того, readlines() возвращает строку с новой строкой. Это заставляет ваше приложение отправлять форму на send_keys строке. Я использовал splitlines() для удаления новой строки. И поместите код в блок try для обработки любого исключения. С помощью traceback вы можете обработать исключение, но все равно увидите ошибки

Редактировать 2: Вы должны дождаться появления элементов, прежде чем пытаться получить доступ к элементу. Вот почему было выброшено исключение NoSuchElement.
brower.quit() закрывает браузер и уничтожает экземпляр веб-драйвера. В противном случае он все равно будет работать в фоновом режиме. Если вы не хотите, чтобы ваш браузер закрывался после запуска или какого-либо исключения, закомментируйте его.

Попробуйте следующее:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import traceback

browser = webdriver.Chrome(executable_path="D:\\DEV SOFT\\chromedriver_win32\\chromedriver.exe")
wait = WebDriverWait(browser, 30)
lines = open('acc.txt', 'r').read().split('\n')

for l in lines:
    try:

        browser.get('https://www.palai.org/u/sign_in')
        email = wait.until(EC.visibility_of(browser.find_element_by_id("user_email")))
        email.send_keys(l)
        # browser.find_element_by_id('user_email').send_keys(l)
        password = wait.until(EC.visibility_of_element_located((By.ID,"user_password")))
        password.send_keys("Hard49Pierburg49")

        commit = wait.until(EC.visibility_of(browser.find_element(By.NAME,'commit')))
        commit.click()

        collect = wait.until(EC.visibility_of(browser.find_element_by_link_text('Abholen')))
        collect.click()

        collectTwo = wait.until(EC.visibility_of(browser.find_element_by_xpath('//*[@id=\"app\"]/article/div[1]/div/div/div/div[1]/div/div/form/input[1]')))
        collectTwo.click()

        browser.get('https://palai.org/a/kliment+843fb7f2d-f17f-4f86-8365-0aeaf61f566e/pay?transfer_amount=176PALAI')

        submit = wait.until(EC.visibility_of(browser.find_element_by_id('submit_transfer')))
        submit.click()

        logout = wait.until(EC.visibility_of(browser.find_element_by_css_selector("form.button_to > button")))
        logout.click()
        # browser.save_screenshot("palai.png")
    except Exception as e:
        traceback.print_exc()
        browser.quit()

browser.quit()
2 голосов
/ 25 апреля 2019

Собрать каждую строку из файла в виде списка строк с

with open('file.txt') as f:
    lines = f.readlines()

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

for l in lines:
    //handle line values here

Вы также можете найти свой ответ в этом другом SO сообщении: Как построчно прочитать файл в список?

Отредактированный ответ Ахмеда

from selenium import webdriver
browser = webdriver.Chrome('C:\\Users\klime\Desktop\Python Palai Bot\chromedriver')
browser.get('https://www.palai.org/u/sign_in') 
# "acc.txt" is your filepath/name
with open('acc.txt') as f:
    #this will put your each line in your text file in a list of strings, to use in the loop
    lines = f.readlines()
    #this will make a loop for each string in your list, using its value in a variable called "line".
    for line in lines:
        email = browser.find_element_by_id('user_email')
        email.send_keys(line)
        password = browser.find_element_by_id('user_password')
        password.send_keys('mypassword')
        commit = browser.find_element_by_name('commit')
        commit.click()
        collect = browser.find_element_by_link_text('Abholen')
        collect.click()
        collectTwo = browser.find_element_by_xpath('//*[@id=\"app\"]/article/div[1]/div/div/div/div[1]/div/div/form/input[1]')
        collectTwo.click()
        browser.get('https://palai.org/a/kliment+843fb7f2d-f17f-4f86-8365-0aeaf61f566e/pay?transfer_amount=176PALAI')
        submit = browser.find_element_by_id('submit_transfer')
        submit.click()
        logout = browser.find_element_xpath('//*[@id=\"app\"]/header/div[2]/form/button')
        logout.click()
        logout = browser.find_element_by_xpath('//*[@id=\"app\"]/header/div[2]/form/button')
        logout.click()
0 голосов
/ 25 апреля 2019

Для чтения / записи в файл, вы должны сначала открыть его, используя file = open('fileName.txt','x'), где x может быть либо a для добавления, w для записи, r для чтения и r+ для чтения инаписать.Если вы используете запись, она удалит все содержимое файла перед записью.Добавить будет, ну, добавить его в конец файла.Чтобы прочитать строку, вы просто используете функцию line = file.readline() в цикле while, прерываясь при line == null.Чтобы записать в файл, вы просто идете file.write("Blahblahblah \n').Обратите внимание, что \n необходимо только для создания новых строк.В противном случае он просто продолжит писать в конце последнего символа.

Для получения дополнительной информации просто посмотрите на документы, они довольно просты:

https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...