python selenium:可以取消 driver.get() 上的重定向吗?

python selenium: possible to cancel redirect on driver.get()?

有没有办法阻止 url 重定向?

driver.get('http://loginrequired.com')

这会将我重定向到另一个页面,但我希望它保留在该页面上而不默认重定向。

用户所谓的“重定向”通常通过两种方式发生:

  1. 您加载了一个页面,该页面加载了一些 JavaScript 代码,该代码执行测试并决定加载另一个页面。在某些浏览器中,可以通过按 ESCAPE 键来中断此过程。 Selenium 可以发送一个 ESCAPE 键。

    但是,这种重定向可能会在 Selenium 将控制权交还给您的脚本之前发生。它是否适用于任何特定情况取决于正在加载的页面。

  2. 您加载页面并从服务器获得 HTTP 3xx(301、303、304 等)响应。用户没有机会在他们的浏览器中中断这些重定向,因此 Selenium 不提供中断或阻止它们的方法。

所以没有万无一失的方法来防止 Selenium 中的重定向。

一个解决方案,如果你不需要可视化页面但访问“http://loginrequired.com”的源将是使用 Selenium 和 Scrapy。

基本上你告诉 Scrapy 中间件停止重定向,当蜘蛛访问页面时,重定向是处理重定向 (302)。

在 setting.py 你必须设置

"REDIRECT_ENABLED=False"

爬虫代码是:

class LoginSpider(CrawlSpider):
    name = "login"
    allowed_domains = ['loginrequired.com']
    start_urls = ['http://loginrequired.com']
    handle_httpstatus_list = [302]

def __init__(self):
    self.driver = webdriver.Firefox()

def parse(self, response):
    if response.status in self.handle_httpstatus_list:
        return Request(url="http://loginrequired.com", callback=self.after_302)

def after_302(self, response):
    print response.url
    # Your code to analysis the page by here 

灵感来自 how to handle 302 redirect in scrapy