使用 Python 执行 vBulletin-Forum 登录

Perform a vBulletin-Forum login with Python

我想登录 vbulletin 论坛。

登录后您将被重定向到主页。我想要一个只有登录后才能看到的论坛帖子的内容。

我发现了这个问题:Login to Vbulletin forum with python

我的代码如下所示:

username = "testuser"
password = "testpassword"
try:
FORUM_URL = 'https://forumurl.com/forum/'
session = requests.Session()
session.post(FORUM_URL + 'login.php?do=login', {
    'vb_login_username':        username,
    'vb_login_password':        password,
    'vb_login_md5password':     hashlib.md5(password.encode()).hexdigest(),
    'vb_login_md5password_utf': hashlib.md5(password.encode()).hexdigest(),
    'cookieuser': 1,
    'do': 'login',
    's': '',
    'securitytoken': 'guest'
})
except Exception as e:
    print(str(e))

q = session.get("https://forumurl.com/forum/showthread.php?123456")
print(str(q.text))

这会生成以下输出:(已翻译)

<meta http-equiv="refresh" content="1">
<noscript>
<p>Javascript and Cookies need to be enabled</p>
</noscript>
<script>
createCookie("test", "md5hashofcookie");
function createCookie(name,value,days) {
        if (days) {
                var date = new Date();
                date.setTime(date.getTime()+(days*24*60*60*1000));
                var expires = "; expires="+date.toGMTString();
        }
        else var expires = "";
        document.cookie = name+"="+value+expires+"; path=/";
}

</script>

在此之后,我尝试使用 firefoxdriver 进行登录,这也得到了上面的输出。

我也尝试用 mechanize 来做,并使用了下面的代码:

br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('user-agent', '  Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0'),
('accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8')]

br.open("https://testforum.com/forum/login.php?do=login")

br.form = list(br.forms())[0]
br["vb_login_username"] = username
br["vb_login_password"] = password
br["vb_login_md5password"] = hashlib.md5(password.encode()).hexdigest()
br["vb_login_md5password_utf"] = hashlib.md5(password.encode()).hexdigest()
br["cookieuser"] = 1
br["do"] = "login"
br["s"] = ""
br["securitytoken"] = "guest"

response = br.submit()
print(response)

这会生成以下输出:

mechanize._response.httperror_seek_wrapper: HTTP Error refresh: The HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
OK

我不知道如何在启用 cookies/javascript 的情况下进行登录。

编辑:

我得到了 Selenium 的解决方案:

driver = webdriver.Firefox()
driver.get("https://12345.com/forum/forum.php")
time.sleep(15)
driver.find_element_by_link_text("Login").click()
time.sleep(5)
driver.find_element_by_class_name("loginbutton").click()
driver.find_element_by_id("vb_login_username").send_keys(username)
driver.find_element_by_id("vb_login_password").send_keys(password)
driver.find_element_by_class_name("button").click()

抱歉,忘记标记为已回答。

这里是代码:

driver = webdriver.Firefox()
driver.get("https://12345.com/forum/forum.php")
time.sleep(15)
driver.find_element_by_link_text("Login").click()
time.sleep(5)
driver.find_element_by_class_name("loginbutton").click()
driver.find_element_by_id("vb_login_username").send_keys(username)
driver.find_element_by_id("vb_login_password").send_keys(password)
driver.find_element_by_class_name("button").click()