python - Webdriver phantomjs 不再跟随点击链接

标签 python selenium selenium-webdriver phantomjs

我使用一个简单的 webdriver phantomjs 脚本来更新 preloved.co.uk 上的一些广告。该脚本直到最近都运行良好,但在单击登录链接后开始失败,出现“单击已提交但加载失败”错误。按照this我按照指南 here 将 phantomjs 版本更新到最新稳定版 1.9.7 。但是,现在登录点击似乎也没有注册,并且页面没有重新加载。

第一步只是进入登录表单页面。

from selenium import webdriver
br = webdriver.PhantomJS(service_log_path='/path/to/logfile.log')
url = "http://www.preloved.co.uk"
br.get(url)

# Go to login page
login_button = br.find_element_by_xpath('//div[@id="header-status-login"]/a')
login_button.click()

通常(例如,如果您将浏览器行替换为 br = webdriver.Firefox()),这会导致重新加载到登录页面,并且脚本从那里继续,但现在它出现了单击根本不会加载新页面,并且 br.current_url 仍然是 ' http://www.preloved.co.uk/ '

为什么这个负载不起作用?

即使我提取 href 并执行显式 GET,它似乎也不会遵循并重新加载:

newurl=login_button.get_attribute('href')
br.get(newurl)

br.current_url 仍然是 ' http://www.preloved.co.uk/ '.

最佳答案

登录页面通过 https 进行保护。最近,POODLE 漏洞迫使网站从 SSLv3 转向 https,但由于 PhantomJS 使用 SSLv3 per default登录页面无法加载。另请参阅this answer .

可以通过将 --ssl-protocol=tlsv1--ssl-protocol=any 传递给 PhantomJS 或将 PhantomJS 升级到至少版本 1.9.8 来修复此问题。看来 service_args 参数可以用于 Selenium 的 python 绑定(bind)中。

看起来像 current official implementation service_args 无法从 WebDriver 传递到 PhantomJS 中的 Service。您可以对其进行子类化。

from selenium import webdriver
from selenium.webdriver.phantomjs.service import Service
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver

class PhantomJSService(webdriver.PhantomJS):
    def __init__(self, executable_path="phantomjs", port=0,
                 desired_capabilities=DesiredCapabilities.PHANTOMJS,
                 service_args=None, service_log_path=None):

        self.service = Service(executable_path, 
                               port=port, service_args=service_args,
                               log_path=service_log_path)
        self.service.start()

        try:
            RemoteWebDriver.__init__(self,
                command_executor=self.service.service_url,
                desired_capabilities=desired_capabilities)
        except:
            self.quit()
            raise 

看来这个webdriver fork包含设置这些选项所需的参数。

关于python - Webdriver phantomjs 不再跟随点击链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26560833/

相关文章:

junit - 为什么selenium通过Xpath定位元素在IE中失败,但在firefox中却可以正常工作?

java - 列表项 li 未通过 Selenium WebDriver 从下拉列表中选择

ruby - 如何阻止 chromedriver 自动打开设置选项卡?

javascript - 检查一个对象是否是一个有前途的函数

python - 什么是适用于 Python 的良好 XML 流解析器?

python - Matplotlib : Paint cells of matrix based on indexes stored in array

java - 滚动到 WebElement 并单击它

java - 如何在katalon studio中将WebElement转换为TestObject?

python - 比较两个几乎相等的 Pandas Series/DataFrame

Python 无法从 phi 创建 mpf