【问题标题】:How can I use Python Mechanize to fill out a web form that requires Javascript?如何使用 Python Mechanize 填写需要 Javascript 的 Web 表单?
【发布时间】:2018-05-13 11:34:32
【问题描述】:

我正在尝试使用 mechanize 填写表格。但问题是网页需要javascript。因此,每当我尝试访问该页面时,该页面都会重定向到一个错误页面,指出需要 javascript。有没有办法在使用机械化浏览器时启用javascript?

这里是代码

import mechanize
import ssl

ssl._create_default_https_context = ssl._create_unverified_context
br = mechanize.Browser()
br.set_handle_robots(False)
br.open("https://192.168.10.3/connect/PortalMain")
for f in br.forms():
    print f

此外,当我尝试使用“在我的浏览器上运行良好”的 BeautifulSoup 提取网页时,我遇到了同样的问题。它重定向到一个新页面。 (我尝试在我的浏览器上禁用 javascript 并得到漂亮汤显示给我的页面。)

如果有帮助,这里是 BeautifulSoup 的代码

import ssl
import urllib2
from bs4 import BeautifulSoup

ssl._create_default_https_context = ssl._create_unverified_context
page = urllib2.urlopen("https://192.168.10.3/connect/PortalMain")
soup = BeautifulSoup(page,'html.parser')
print soup

【问题讨论】:

    标签: python mechanize


    【解决方案1】:

    您可以继续使用 Selenium:

    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
    
    usernameStr = 'putYourUsernameHere'
    passwordStr = 'putYourPasswordHere'
    
    browser = webdriver.Chrome()
    browser.get('https://192.168.10.3/connect/PortalMain')
    
    # fill in username and hit the next button (replace selectors!)
    username = browser.find_element_by_id('Username')
    username.send_keys(usernameStr)
    password = browser.find_element_by_id('Password')
    password.send_keys(passwordStr)
    loginButton = browser.find_element_by_id('login')
    loginButton.click()
    

    这将使用 Chrome 网络驱动程序打开您的浏览器并登录,您可以将其切换为使用 Selenium 支持的任何其他驱动程序,例如火狐。

    来源:https://www.hongkiat.com/blog/automate-create-login-bot-python-selenium/

    请记住,如果网站使用自签名证书,您可能需要进行调整。

    【讨论】:

    • 如何添加对不受信任/自签名证书的支持
    • 浏览器行出现错误File "demo.py", line 9, in <module> browser = webdriver.Chrome() File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 68, in __init__ self.service.start() File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/common/service.py", line 83, in start os.path.basename(self.path), self.start_error_message) selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
    • 您需要安装我发给您的源链接中详细介绍的 chromedriver。错误消息中甚至还有一个指向解决此问题的说明的链接。
    • 另外,不要将 Python 2.7 用于新项目,除非有特定原因不能使用,否则无论何时开始新项目都应该使用 Python 3.6。
    • 没问题,如果这个答案是正确的,如果您能将其标记为已接受的答案,我将不胜感激。
    猜你喜欢
    • 2014-04-13
    • 2018-09-24
    • 2020-12-06
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多