python - 登出网站并不能正常工作。/ 如果网站没有加载关闭浏览器并重新打开
问题描述
因此,我用 Python 编写了一个脚本,该脚本登录到一个帐户收集一些货币并注销,它循环访问了很多帐户。它很容易成为用大量账户收集这种货币的脚本。问题是每次脚本需要注销时,它都会单击“注销”按钮,但如果它再次进入“注册”页面,它会说它仍然处于登录状态。顺便说一句,有时网站确实加载并且脚本只是自行关闭有人知道如何实现重新加载页面或重新打开 chromedriver 的功能吗?
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
from selenium.common.exceptions import TimeoutException
import traceback
from time import sleep
browser = webdriver.Chrome(executable_path='C:\\Users\klime\Desktop\Python Palai Bot\chromedriver')
wait = WebDriverWait(browser, 30)
lines = open('acc.txt', 'r').read().split('\n')
for l in lines:
try:
print("Trieng to connect to Palai.org")
browser.get('https://www.palai.org/u/sign_in')
print("Successfully connected to Palai.org!")
print("Trieng to Log into the Account: ", l)
email = wait.until(EC.visibility_of(browser.find_element_by_id("user_email")))
email.send_keys(l)
password = wait.until(EC.visibility_of_element_located((By.ID,"user_password")))
password.send_keys("mypassword")
commit = wait.until(EC.visibility_of(browser.find_element_by_name('commit')))
commit.click()
print("Successfully logged in!")
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()
print("Successfully collected Palai")
print("Transfering...")
browser.get('https://palai.org/a/kliment+843fb7f2d-f17f-4f86-8365-0aeaf61f566e/pay?transfer_amount=176PALAI')
email = wait.until(EC.visibility_of(browser.find_element_by_id("user_email")))
email.send_keys(l)
password = wait.until(EC.visibility_of_element_located((By.ID,"user_password")))
password.send_keys("mypassword")
commit = wait.until(EC.visibility_of(browser.find_element_by_name('commit')))
commit.click()
print("Successfully logged in now Transfering Palai...")
submit = wait.until(EC.visibility_of(browser.find_element_by_id('submit_transfer')))
submit.click()
print("Successfully transferd the Palai to the Main Account!")
print("Logging out...")
logout = wait.until(EC.visibility_of(browser.find_element_by_css_selector("form.button_to > button")))
logout.click()
sleep(10)
print("Successfully logged out of the Account!")
except Exception as e:
traceback.print_exc()
browser.quit()
browser.quit()
这是我遇到的错误
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 22:20:52) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>>
========== RESTART: C:\Users\klime\Desktop\Python Palai Bot\Bot.py ==========
Trieng to connect to Palai.org
Successfully connected to Palai.org!
Trieng to Log into the Account: thisismyemail@myemail.com
Successfully logged in!
Successfully collected Palai
Transfering...
Successfully logged in now Transfering Palai...
Successfully transferd the Palai to the Main Account!
Logging out...
Successfully logged out of the Account!
Trieng to connect to Palai.org
Successfully connected to Palai.org!
Trieng to Log into the Account: thisismyemail2@myemail.com
Traceback (most recent call last):
File "C:\Users\klime\Desktop\Python Palai Bot\Bot.py", line 21, in <module>
email = wait.until(EC.visibility_of(browser.find_element_by_id("user_email")))
File "C:\Users\klime\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 360, in find_element_by_id
return self.find_element(by=By.ID, value=id_)
File "C:\Users\klime\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
'value': value})['value']
File "C:\Users\klime\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\klime\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"user_email"}
(Session info: chrome=74.0.3729.108)
(Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Windows NT 10.0.17763 x86_64)
Trieng to connect to Palai.org
Traceback (most recent call last):
File "C:\Users\klime\AppData\Local\Programs\Python\Python37-32\lib\site-packages\urllib3\connection.py", line 159, in _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw)
File "C:\Users\klime\AppData\Local\Programs\Python\Python37-32\lib\site-packages\urllib3\util\connection.py", line 80, in create_connection
raise err
File "C:\Users\klime\AppData\Local\Programs\Python\Python37-32\lib\site-packages\urllib3\util\connection.py", line 70, in create_connection
sock.connect(sa)
ConnectionRefusedError: [WinError 10061] Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\klime\AppData\Local\Programs\Python\Python37-32\lib\site-packages\urllib3\connectionpool.py", line 600, in urlopen
chunked=chunked)
File "C:\Users\klime\AppData\Local\Programs\Python\Python37-32\lib\site-packages\urllib3\connectionpool.py", line 354, in _make_request
conn.request(method, url, **httplib_request_kw)
File "C:\Users\klime\AppData\Local\Programs\Python\Python37-32\lib\http\client.py", line 1229, in request
self._send_request(method, url, body, headers, encode_chunked)
File "C:\Users\klime\AppData\Local\Programs\Python\Python37-32\lib\http\client.py", line 1275, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "C:\Users\klime\AppData\Local\Programs\Python\Python37-32\lib\http\client.py", line 1224, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "C:\Users\klime\AppData\Local\Programs\Python\Python37-32\lib\http\client.py", line 1016, in _send_output
self.send(msg)
File "C:\Users\klime\AppData\Local\Programs\Python\Python37-32\lib\http\client.py", line 956, in send
self.connect()
File "C:\Users\klime\AppData\Local\Programs\Python\Python37-32\lib\site-packages\urllib3\connection.py", line 181, in connect
conn = self._new_conn()
File "C:\Users\klime\AppData\Local\Programs\Python\Python37-32\lib\site-packages\urllib3\connection.py", line 168, in _new_conn
self, "Failed to establish a new connection: %s" % e)
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x0476D390>: Failed to establish a new connection: [WinError 10061] Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte
那么脚本应该正常注销没有任何问题,如果浏览器没有加载页面,浏览器就会关闭并重新打开。
解决方案
似乎您的代码块接近完美。当您尝试将字符序列发送到所需的字段时,而不是使用expected_conditions
of visibility_of()
,您需要使用element_to_be_clickable()
如下:
print("Trieng to connect to Palai.org")
browser.get('https://www.palai.org/u/sign_in')
# WebDriverWait(browser, 10).until(EC.title_contains("Log in – Palai (beta)"))
print("Successfully connected to Palai.org!")
print("Trieng to Log into the Account: ", l)
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.ID, "user_email"))).send_keys(l)
browser.find_element_by_id("user_password").send_keys("mypassword")
browser.find_element_by_name('commit').click()
print("Successfully logged in!")
推荐阅读
- javascript - 如何撤消或删除openlayers中的点交互
- python - 什么会阻止 scikit-learn,尤其是 sklearn.base 导入 Python?
- ruby-on-rails - 动态形式 rails 6
- dataframe - 如何使用 Seaborn Heatmap 选择日期频率和显示日期
- linux - 为什么我会从此脚本中收到“找不到命令”错误?
- opam - opam init 失败 - 无法创建临时文件
- mongodb - 为什么mongodb以base64的形式存储二进制数据?
- python - 我如何隐藏 Progressbar()?
- aws-lambda - 将 Step Function 变量传递给 AWS Glue 作业不工作
- rabbitmq - Rabbitmq 客户端失去连接并且无法恢复