首页 > 解决方案 > 使用onclick按钮登录网站提交

问题描述

我正在尝试使用 python3.7 对需要用户电子邮件和密码才能登录的网站进行网络抓取。

登录页面的登录表单如下:

  <div id="login">
<form action="/account/orthodox_login" method="post" id="orthodox_login">
  <input id="slugs_input_login" name="slugs[]" type="hidden" value="" />
  <input id="return_after_login" name="rt" type="hidden" value="" />
  <input name="user[url_source]" type="hidden" value="" id="login_form_url_source" />
  <input name="user[location_source]" type="hidden" value="orthodox_login" />

  <h1 id="member_h1">Member sign in</h1>

  <div id="notice_login" class="notice_message" style="margin-top: 20px"></div>

  <div id="with_email" class="fwb login_update" style="display: none; margin-bottom: 0; font-size: 13px; color: #484848;">Sign in with email:</div>

  <fieldset>
    <span>Email:</span>
    <input name="user[email]" id="login_user_email" type="email" autocorrect="off" autocapitalize="off" spellcheck="false" />
  </fieldset>


  <fieldset>
    <span>Password:</span>
    <div id='password_wrapper'><input name="user[password]" type="password" id="login_user_password" autocorrect="off" autocapitalize="off" /></div>
  </fieldset>


      <div class="register_button" onclick="submit_orthodox_login_form();">
        <span class="l"></span>
        <input class="c" type="button" value="Sign in" />
        <span class="r"></span>
      </div>
    </form>


      <div id="or_google" class="fwb mb7 login_update" style="display: none; width: 250px; font-size: 13px; color: #484848;">Or sign in with Google:</div>
  <div id="another_place" class="login_update" style="display: none; margin-left: -10px;"></div>
  <div class="secret_line login_update" style="display: none; margin-bottom: 16px">
    <div style="border-bottom: 1px solid #ebebeb; width: 313px; margin-bottom: 0;"></div>
  </div>
  <div id="dont_have" class="roy-gray login_update" style="display: none">Don't have an account? <span class="link" onclick="open_header_log_in_popup_lightbox('headtabs_login',''); return false">Join now</span></div>
  </div>

我搜索了有关登录的其他帖子,答案是使用以下内容给出的mechanicalsoup

br = mechanicalsoup.StatefulBrowser(
    soup_config={'features': 'lxml'},
    raise_on_404=True,
    user_agent='MyBot/0.1: mysite.example.com/bot_info',
)

br.open("https://seekingalpha.com/account/login")
br.select_form('#orthodox_login')


browser["login"] = args.username
browser["password"] = args.password
resp = browser.submit_selected()

但是,这在我的情况下不起作用,因为在表单中没有<input type="submit">类似github 的 login,而是一个<div class="register_button" onclick="submit_orthodox_login_form();">.

我还想在登录后重定向到这个链接,这是我想要进行网络抓取的实际网站。

标签: pythonweb-scrapingbeautifulsouppython-requestsmechanicalsoup

解决方案


我认为您想要自动化的网站使用 JavaScript,而 MechanicalSoup 不支持 javascript。你应该寻找像 selenium 这样支持 javascript 的解决方案


推荐阅读