【问题标题】:Logging out of the Site doesent work properly. / If site doesent load close Browser and reopen登出网站无法正常工作。 / 如果网站没有加载关闭浏览器并重新打开
【发布时间】:2019-04-28 16:41:46
【问题描述】:

所以我用 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

脚本应该正常注销,没有任何问题,如果浏览器没有加载页面,浏览器就会关闭并重新打开。

【问题讨论】:

  • 好吧,在您的异常处理中,您明确告诉浏览器退出并且永远不会重新启动它,所以这必然会在您遇到任何异常时发生。我要说的另一条评论是,虽然您的 print 语句可以告诉您是否毫无例外地到达了该代码,但它们实际上并不表示先前采取的操作是成功的;为此,您需要对新页面上的元素或类似的东西进行断言。最后,对于您的问题,您可以简单地在循环结束时关闭浏览器并在开始时重新打开它吗?

标签: python python-3.x selenium selenium-chromedriver webdriverwait


【解决方案1】:

您的代码块似乎接近完美。当您尝试将字符序列发送到所需字段时,您需要使用element_to_be_clickable(),而不是使用visibility_of()expected_conditions,如下所示:

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!")

【讨论】:

  • 由于某种原因我无法复制错误,所以我只是做了一个截图prntscr.com/ni19p9
  • @Kliment 我已经评论了这条线,你现在可以尝试一次吗?
  • 现在它可以工作了,但现在还有另一个问题。它注销并再次打开登录页面以登录下一个帐户,但由于某种原因它说我已经登录。prntscr.com/ni1rba
  • @Kliment 似乎您正在使用的算法需要修改,但这将是一个完全不同的问题。随时根据您的新要求提出新问题。
  • 你是什么意思@DebanjaB
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
  • 2022-07-21
  • 1970-01-01
  • 1970-01-01
  • 2017-06-02
相关资源
最近更新 更多