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

本文详细介绍如何在Selenium中使用火狐和Chrome浏览器的无头模式进行网页抓取,包括驱动安装、环境配置及代码示例。同时,提供了一个使用Selenium自动登录豆瓣网站的完整案例。

最新版本的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 Options

def 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  WebDriverWait

path = '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()

 
   

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

要使用Selenium库来模拟浏览器行为,你需要先安装Selenium库,下载相应的浏览器驱动程序。以下是使用Selenium模拟浏览器行为的基本步骤: 1. 安装Selenium库:使用pip命令安装Selenium库。 ``` pip install selenium ``` 2. 下载浏览器驱动程序:根据你使用的浏览器类型版本,下载相应的浏览器驱动程序。常见的浏览器驱动程序有ChromeDriver(用于Chrome浏览器)、GeckoDriver(用于Firefox浏览器)等。 3. 配置驱动程序路径:将下载的浏览器驱动程序解压,将其路径添加到系统的环境变量中,或者在代码中指定驱动程序的路径。 4. 编写使用Selenium的代码:导入Selenium库,创建一个浏览器对象。通过浏览器对象,你可以进行各种操作,如打开网页、查找元素、模拟点击等。 以下是一个示例代码,使用Selenium模拟打开豆瓣时光网页,获取文章内容作者名字: ``` from selenium import webdriver # 创建浏览器对象 driver = webdriver.Chrome() # 使用Chrome浏览器,需要下载对应的ChromeDriver url = 'https://m.douban.com/time/column/213/?dt_time_source=douban-web_anonymous' driver.get(url) # 打开网页 # 获取文章内容作者名字 result = driver.find_elements_by_xpath('//div[@class="i+xqa"]/p[@class="K2fUh"]') name = driver.find_elements_by_xpath('//div[@class="i+xqa"]/span[@class="0e60A"]') # 打印结果 for r, n in zip(result, name): print(r.text, '-', n.text) # 关闭浏览器 driver.quit() ``` 这段代码使用Chrome浏览器驱动程序,打开豆瓣时光网页,通过xpath定位获取文章内容作者名字。最后,通过循环遍历将结果打印输出。 请注意,使用Selenium模拟浏览器行为可能会较慢,因为它会启动一个真实的浏览器来执行操作。此外,你还可以通过模拟点击、滚动等操作来获取更多的页面内容。具体的操作方法使用方式,请参考Selenium的官方文档。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值