Вы почти у цели.
Вы должны войти в систему и выполнить все задачи, которые вам нужно выполнить, и выйти из системы в цикле, где вы пересекаете линии.
В цикле 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()