标签: mechanicalsoup

通过Python登录网站 - 如何处理CSRF?

我正在使用Python 3作为脚本,该脚本将监视用户在网页上的个人资料中的更新.登录此站点受CSRF对策的保护,这是一件好事.但是,我无法让我的脚本登录此站点.

  • 我的方法使用mechanicalsoup:

    import mechanicalsoup
    
    browser = mechanicalsoup.Browser()
    login_page = browser.get(base_url)
    login_form = login_page.soup.select(".form-signin")[0]
    
    login_form.find(attrs={"name": "username"})['value'] = 'username'
    login_form.find(attrs={"name": "password"})['value'] = 'password'
    
    page2 = browser.submit(login_form, login_url)
    print(str(page2.text))
    
    Run Code Online (Sandbox Code Playgroud)
  • 我的方法使用robobrowser:

    import re
    from robobrowser import RoboBrowser
    
    browser = RoboBrowser(history=True)
    browser.open(base_url)
    form = browser.get_form(action='/login/')
    
    form["username"] = 'username'
    form["password"] = 'password'
    
    browser.submit_form(form)
    print(str(browser.select))
    
    Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我最终得到HTTP状态403和消息说CSRF verification failed. Request aborted.

  • 任何想法如何解决这一问题?
  • 有问题的表单有一个包含CSRF令牌的隐藏输入.我想mechanicalsoup并且robobrowser也会提交此输入.我对吗?或者我必须特别对待它?
  • 我认为这两个包使用的会话将处理像cookie等所有内容.有没有我错过的东西?

python robobrowser mechanicalsoup

6
推荐指数
1
解决办法
1万
查看次数

使用 Mechanicalsoup 设置带名称的表单元素的值

我已经搜索了所有 Mechanicalsoup 和 beautifulsoup 文档,但无法弄清楚如何使用“id”设置表单元素的值(因为它没有名称)。

import mechanicalsoup
browser = mechanicalsoup.StatefulBrowser()

browser.open(my_url)

form = browser.select_form('form[id="login-form"]')

browser.get_current_form().print_summary()
userid = browser.get_current_page().find('input', id='text-userid')
form.set("text-userid", "user")
Run Code Online (Sandbox Code Playgroud)

这让我——

<input class="login-text-box" id="text-userid" placeholder="Email" type="text" value=""/>
<input class="login-text-box" id="text-password" placeholder="Password" type="password" value=""/>
<input id="button-login" type="submit" value="Sign In"/>
<input id="remember-me-checkbox" name="rememberme" type="checkbox" value="rememberme"/>
LinkNotFoundError: No valid element named text-userid
Run Code Online (Sandbox Code Playgroud)

我曾尝试通过 id、CSS 选择器和其他组合引用元素,但得到相同的错误。我能够通过以下方式获取实际标签(我发现它是提交按钮类似问题的解决方案):

userid = browser.get_current_page().find('input', id='text-userid')
Run Code Online (Sandbox Code Playgroud)

但 form.set() 不直接接受标签。

谢谢你的帮助!

beautifulsoup mechanicalsoup

6
推荐指数
1
解决办法
1945
查看次数

Python mechanicalsoup设置Combobox值

html页面中有一个下拉列表.我需要在Python中使用mechanicalsoup来设置我想要的值.我尝试了这个,但它没有用.如果有可能(我希望)我如何在组合框中设置一个值.还有另一个组合框(名为combo2).Combo2的值取决于Combo1的值.Combo1刷新Combo2.

import mechanicalsoup
browser = mechanicalsoup.Browser()
url = 'https://www.webpage.com/main.jsp?page=Page2'
login_page = browser.get(url)
form = mechanicalsoup.Form(login_page.soup.find("form", {"name":"Form2"}))
input_data = {"Combo1": "02"}

<select name="Combo1" id="Combo1" onchange="fillMe('idoof', 'cName')" class="test">
<option value="">Select</option>
<option value="01">Apple</option>
<option value="02">Orange</option>
<option value="03">WaterMelon</option>
<option value="04">Grapefruit</option>
<option value="05">Pineapple</option>
<option value="06">Salad</option>
<option value="07">Tomato</option>
<option value="08">Beet</option>
</select>
Run Code Online (Sandbox Code Playgroud)

python web-scraping python-3.x mechanicalsoup

5
推荐指数
0
解决办法
290
查看次数

MechanicalSoup (python 3x) 可以处理网站中的 javascript 吗?

我可以成功登录并浏览网站,但是当我检查注销按钮时,它就像javascript:__doPostBack('ctl00$lnkBtnLogout','')链接一样,follow_link()不起作用(说:没有适配器)???有人能帮我吗?

javascript python-3.x mechanicalsoup

1
推荐指数
1
解决办法
737
查看次数

使用Python MechanicalSoup登录时出现503错误

我想在登录页面后面抓取一些信息,但得到503

当我尝试使用Mechanicalsoup登录时(与robobrowser的结果相同),将发生以下情况:

>>> import mechanicalsoup
>>> browser = mechanicalsoup.StatefulBrowser(user_agent='Mozilla/5.0')
>>> page = browser.get('https://X.com')
>>> page.status_code
200
>>> page = browser.get('https://X.com/wp-login.php')
>>> page.status_code
503
Run Code Online (Sandbox Code Playgroud)

我尝试了几个不同的user_agents,如何解决呢?移动饼干?

python mechanize web-scraping mechanicalsoup

0
推荐指数
1
解决办法
428
查看次数

从网页代码中删除广告

我有广告拦截规则列表(示例
如何将它们应用到网页?我使用 MechanicalSoup(基于 BeautifulSoup)下载网页代码。我想将其保存为 bs 格式,但 etree 也可以。
我尝试使用以下代码,但某些页面存在问题:
ValueError: Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.

beautifulsoup adblock web-scraping python-3.x mechanicalsoup

0
推荐指数
1
解决办法
4809
查看次数