热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

selenium配置Firefox和chrome浏览器并模拟登陆豆瓣

最新版本的selenium已不再支持PhantomJS,使用时会直接报错:UserWarning:SeleniumsupportforPhantomJ

最新版本的selenium已不再支持PhantomJS,使用时会直接报错:

UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead warnings.
warn('Selenium support for PhantomJS has been deprecated, please use headless '

中文意思是:selenium已经放弃PhantomJS,请使用火狐浏览器或者Chrome浏览器的无头模式(headless,即无界面模式)。

首先我们需要解决的selenium对火狐和Chrome浏览器的驱动支持问题,事实上以前并不存在驱动问题,随着浏览器版本的不断提高,才发生驱动问题。


Firefox驱动

火狐需要安装geckodriver,下载最新版geckodriver,将geckodriver.exef放在C:\Program Files (x86)\Mozilla Firefox目录下,并将其加入环境变量,若不加入环境变量,在运行时需要给出驱动所在目录。后面Chrome浏览器同样。代码demo如下:

from selenium import webdriver def main(): profile=webdriver.FirefoxOptions()profile.add_argument('-headless') #设置无头模式driver = webdriver.Firefox(executable_path='C:\Program Files (x86)\Mozilla Firefox\geckodriver', firefox_options=profile) #前面给出路径driver.get("https://www.qiushibaike.com/8hr/page/1/") print(driver.page_source) driver.close() if __name__ == '__main__': main()

Chrome驱动

可直接在这个地址下载Chrome驱动,下载时注意对应的版本号,我的Chrome浏览器是V70,选择2.45版本。
在这里插入图片描述
然后将chromedriver.exe文件放在谷歌浏览器安装目录C:\Program Files (x86)\Google\Chrome\Application下(其它路径也行),自行选择是否添加环境变量。Demo如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Optionsdef main():chrome_options = Options()chrome_options.add_argument('--headless')chrome_options.add_argument('--disable-gpu')driver = webdriver.Chrome(executable_path='C:\Program Files (x86)\Google\Chrome\chromedriver', chrome_options=chrome_options)driver.get("https://www.baidu.com")print(driver.page_source)driver.close()if __name__ == '__main__': main()

模拟登陆豆瓣

下面我们就用配置好的selenium和浏览器来自动登陆豆瓣,该代码2019.2.12检验有效,如失效说明豆瓣已更改网页代码。
豆瓣首页如下:
在这里插入图片描述
首选项是手机验证码登录,我们使用帐号密码登陆,因此需要首先点击密码登陆,需用Xpath定位位置
在这里插入图片描述
帐号,密码,登陆按钮的位置也用同样方式确定
在这里插入图片描述


注意点:
这样定位后,模拟登陆豆瓣,会直接失败,显示
unable to lacote username
这是因为豆瓣登陆界面使用了框架,下图


我也是检测了好久才看到页面使用了框架(被自己菜到),因此需要先跳转到框架,否则会定位失败,这个故事告诉我们,动手之前最后先分析一下网页使用的技术。

最终代码如下:

from selenium import webdriver
from selenium.webdriver import ActionChains
import time
from selenium.webdriver.support.ui import WebDriverWaitpath = 'C:\Program Files (x86)\Mozilla Firefox\geckodriver'
def main(): #profile=webdriver.FirefoxOptions()#profile.add_argument('-headless') #设置无头模式driver = webdriver.Firefox(executable_path= path) driver.get("https://www.douban.com")driver.switch_to.frame(driver.find_elements_by_tag_name('iframe')[0])action = driver.find_element_by_xpath("/html/body/div[1]/div[1]/ul[1]/li[2]")ActionChains(driver).move_to_element(action).click(action).perform()#WebDriverWait(driver,10).until(lambda the_driver: the_driver.find_element_by_xpath("//*[@id='username']").is_displayed())driver.find_element_by_xpath("//*[@id='username']").send_keys("帐号")driver.find_element_by_xpath("//*[@id='password']").send_keys("密码")driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[1]/div[5]/a").click()time.sleep(10)driver.switch_to.default_content() # 退出frame,没有这一句不能生成屏幕快照# 生成登陆后快照driver.save_screenshot(u"douban.png")driver.close() if __name__ == '__main__': main()

效果如下:
在这里插入图片描述


推荐阅读
  • 解决MacOS Catalina升级后VMware Fusion黑屏问题的详细指南
    本文深入探讨了如何在MacOS Catalina升级后解决VMware Fusion黑屏的问题。通过详细的步骤和代码示例,帮助用户快速恢复虚拟机的正常运行,并提供了额外的安全建议。适用于希望提升工作效率或学习新技术的读者。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 选择适合生产环境的Docker存储驱动
    本文旨在探讨如何在生产环境中选择合适的Docker存储驱动,并详细介绍不同Linux发行版下的配置方法。通过参考官方文档和兼容性矩阵,提供实用的操作指南。 ... [详细]
  • 本文探讨了如何在iOS开发环境中,特别是在Xcode 6.1中,设置和应用自定义文本样式。我们将详细介绍实现方法,并提供一些实用的技巧。 ... [详细]
  • 本文详细介绍了C语言的起源、发展及其标准化过程,涵盖了从早期的BCPL和B语言到现代C语言的演变,并探讨了其在操作系统和跨平台编程中的重要地位。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • 本文探讨了在iOS平台上开发BLE(蓝牙低功耗)应用程序时遇到的挑战,特别是如何实现应用在后台模式下仍能持续扫描并连接蓝牙设备。文章提供了具体的配置方法和常见的问题解决方案。 ... [详细]
  • 掌握Mosek矩阵运算,轻松应对优化挑战
    本篇文章继续深入探讨Mosek学习笔记系列,特别是矩阵运算部分,这对于优化问题的解决至关重要。通过本文,您将了解到如何高效地使用Mosek进行矩阵初始化、线性代数运算及约束域的设定。 ... [详细]
author-avatar
啊啊毛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有