爬虫?还是自动化?python使用selenium自动进行百度搜索(代码片段)

测试那些事 测试那些事     2022-12-06     451

关键词:


我们今天介绍一个非常适合新手的python自动化小项目,项目虽小,但是五脏俱全。它是一个自动化操作网页浏览器的小应用:打开浏览器,进入百度网页,搜索关键词,最后把搜索结果保存到一个文件里。这个例子非常适合新手学习Python网络自动化,不仅能够了解如何使用Selenium,而且还能知道一些超级好用的小工具。

当然有人把操作网页,然后把网页的关键内容保存下来的应用一律称作网络爬虫,好吧,如果你想这么爬取内容,随你。但是,我更愿意称它为网络机器人。

我今天介绍的项目使用Selenium,Selenium 是支持 web 浏览器自动化的一系列工具和库的综合项目。Selenium 的核心是 WebDriver,这是一个编写指令集的接口,可以在许多浏览器中互换运行。

闲言少叙,硬货安排。

安装 Selenium

可以使用 pip 安装 Python 的 Selenium 库:pip install selenium

(可选项:要执行项目并控制浏览器,需要安装特定于浏览器的 WebDriver 二进制文件。

下载 WebDriver 二进制文件 并放入 系统 PATH 环境变量 中.)

由于本地浏览器版本升级,引起的版本不一致问题,和系统PATH环境变量的设置比较繁琐,所以我使用webdriver_manager,

安装 Install manager:

pip install webdriver-manager

写代码

引入模块:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys

首先我们定义一个类Search_Baidu, 它主要用于初始化;定义自动化步骤的方法;结束关闭浏览器。

class Search_Baidu:
def __init__(self):
def search(self, keyword):
def tear_down(self):

接下来我们分别介绍每个方法的实现过程。

   def __init__(self): #类构造函数,用于初始化selenium的webdriver
        url = 'https://www.baidu.com/' #这里定义访问的网络地址
        self.url = url

        options = webdriver.ChromeOptions()
        options.add_experimental_option("prefs", "profile.managed_default_content_settings.images": 2) # 不加载图片,加快访问速度
        options.add_experimental_option('excludeSwitches', ['enable-automation']) # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium
# 这里使用chrome浏览器,而且使用我们刚才安装的webdriver_manager的chrome driver,并赋值上面的浏览器设置options变量
        self.browser = webdriver.Chrome(ChromeDriverManager().install(), options=options)
        self.wait = WebDriverWait(self.browser, 10) #超时时长为10s,由于自动化需要等待网页控件的加载,所以这里设置一个默认的等待超时,时长为10秒

    def tear_down(self):
        self.browser.close() #最后,关闭浏览器

接下来是重头戏,写我们操作浏览器的步骤,打开浏览器,进入百度网页,输入搜索关键字:Selenium,等待搜索结果,把搜索结果的题目和网址保存到文件里。

def search(self, keyword):
    # 打开百度网页
    self.browser.get(self.url)
    # 等待搜索框出现,最多等待10秒,否则报超时错误
    search_input = self.wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="kw"]')))
    # 在搜索框输入搜索的关键字
    search_input.send_keys(keyword)
    # 回车
    search_input.send_keys(Keys.ENTER)
    # 等待10秒钟
    self.browser.implicitly_wait(10)
    # 找到所有的搜索结果
    results = self.browser.find_elements_by_css_selector(".t a , em , .c-title-text")
    # 遍历所有的搜索结果
    with open("search_result.txt","w") as file:            
        for result in results:
            if result.get_attribute("href"):
                print(result.get_attribute("text").strip())
                # 搜索结果的标题
                title = result.get_attribute("text").strip()
                # 搜索结果的网址
                link = result.get_attribute("href")
                # 写入文件
                file.write(f"Title: title, link is: link \\n")

点位网页元素

这里头有个关键点,就是如何点位网页元素:

比如:

search_input = self.wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="kw"]')))

还有:

self.browser.find_elements_by_css_selector(".t a , em , .c-title-text")

打个比方,快递员通过地址找到你家,给你送快递,这里的XPATH和CSS Selector就是网页元素的地址,那么如何得到呢?
第一个就是Chrome自带的开发者工具,可以快捷键F12,也可以自己在下图中找到:

然后在百度搜索框,右键:

找到输入框的HTML元素,

在HTML元素右键,拷贝XPath地址。

这是比较简单的定位网页元素的方法。接下来我们定位搜索结果元素的时候,就遇到了麻烦,如下图:

我们不能单独的定位每个元素,而是要找到规律,一次把所有的搜索结果找到,然后返回一个list,我们好遍历这个list,这个怎么实现呢?
接下来,我们请出一大神器:SelectorGadget

SelectorGadget是一个CSS Selector生成器,大家可以在他的官方文档找到具体的使用说明,我这里简单介绍一下:
首先启动SelectorGadget,点击一下图标

浏览器会出现下面的框框:

然后我们在网页用鼠标左键,点击我们要定位的元素

然后页面会变成下面的样子:

所有黄色的部分说明都被选择了,如果我们不想要的元素,右键点击,使它变为红色,说明它被去掉了。如果没有被选择我们又需要的元素,我们左键选择它,使它变为绿色。最后我们希望选择的页面元素都变成了绿色或者黄色,如下图:

我们就可以拷贝框框里的内容作为CSS Selector了。

通过CSS Selector找到所有的搜索结果。

results = self.browser.find_elements_by_css_selector(".t a , em , .c-title-text")

到此,我们就实现了这么个简单的小应用了,其实selenium就是帮助我们自动操作网页元素,所以我们定位网页元素就是重中之重,希望本文给你带来一点帮助。
下面我附上代码:

from datetime import time
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys

class Search_Baidu:
    def __init__(self):
        url = 'https://www.baidu.com/'
        self.url = url

        options = webdriver.ChromeOptions()
        options.add_experimental_option("prefs", "profile.managed_default_content_settings.images": 2) # 不加载图片,加快访问速度
        options.add_experimental_option('excludeSwitches', ['enable-automation']) # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium

        self.browser = webdriver.Chrome(ChromeDriverManager().install(), options=options)
        self.wait = WebDriverWait(self.browser, 10) #超时时长为10s

    def search(self, keyword):
        # 打开百度网页
        self.browser.get(self.url)
        # 等待搜索框出现,最多等待10秒,否则报超时错误
        search_input = self.wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="kw"]')))
        # 在搜索框输入搜索的关键字
        search_input.send_keys(keyword)
        # 回车
        search_input.send_keys(Keys.ENTER)
        # 等待10秒钟
        self.browser.implicitly_wait(10)
        # 找到所有的搜索结果
        results = self.browser.find_elements_by_css_selector(".t a , em , .c-title-text")
        # 遍历所有的搜索结果
        with open("search_result.txt","w") as file:            
            for result in results:
                if result.get_attribute("href"):
                    print(result.get_attribute("text").strip())
                    # 搜索结果的标题
                    title = result.get_attribute("text").strip()
                    # 搜索结果的网址
                    link = result.get_attribute("href")
                    # 写入文件
                    file.write(f"Title: title, link is: link \\n")

    def tear_down(self):
        self.browser.close()

if __name__ == "__main__":
    search = Search_Baidu()
    search.search("selenium")
    search.tear_down()

世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。

如果对python自动化测试、web自动化、接口自动化、移动端自动化、面试经验交流等等感兴趣的测试人,可以加群

python--爬虫--selenium的简介和使用(代码片段)

selenium简介什么是seleniumselenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium可以直接运行在浏览器上,它支持所有主流的浏览器,可以接收指令,让浏览器自动加载页面,获取需... 查看详情

python爬虫(二十一)_selenium与phantomjs

...更多内容请参考:Python学习指南SeleniumSelenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动化操作,不同是Selenium可... 查看详情

pythonchrome+selenium自动化测试与python爬虫获取网页数据(代码片段)

一、使用Python+selenium+Chrome报错:selenium.common.exceptions.SessionNotCreatedException:Message:sessionnotcreated:ThisversionofChromeDriveronlysupportsChromeversion78说明,这个chrom驱动支持78版 查看详情

python--爬虫--selenium的简介和使用(代码片段)

selenium简介什么是seleniumselenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium可以直接运行在浏览器上,它支持所有主流的浏览器,可以接收指令,让浏览器自动加载页面,获取需... 查看详情

python--爬虫--selenium的简介和使用(代码片段)

selenium简介什么是seleniumselenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium可以直接运行在浏览器上,它支持所有主流的浏览器,可以接收指令,让浏览器自动加载页面,获取需... 查看详情

小5聊python3使用selenium模块实现简单爬虫系列一(代码片段)

...呢?不妨留言说说本期主要是聊聊,我接触到的selenium模块实现简单的爬虫效果爬虫输出标题 查看详情

selenium2+python自动化69-phantomjs使用转载

前言PhantomJS是一个没有界面的浏览器,本质上是它其实也就是一个浏览器,只是不在界面上展示。PhantomJS非常适合爬虫方面,很多玩爬虫的都喜欢用这个浏览器。 一、PhantomJS环境准备1.先下载PhantomJS浏览器,下载地址:http://... 查看详情

python爬虫编程思想(94):selenium的基本使用方法

Selenium的主要功能有如下几类:打开浏览器获取浏览器页面的特定内容控制浏览器页面上的控件,如向一个文本框中输入一个字符串关闭浏览器        对于爬虫应用来说,第2类功能是必不可少的。因... 查看详情

python爬虫编程思想(94):selenium的基本使用方法

Selenium的主要功能有如下几类:打开浏览器获取浏览器页面的特定内容控制浏览器页面上的控件,如向一个文本框中输入一个字符串关闭浏览器        对于爬虫应用来说,第2类功能是必不可少的。因... 查看详情

0基础学爬虫爬虫基础之自动化工具selenium的使用(代码片段)

...【0基础学爬虫】专栏,帮助小白快速入门爬虫,本期为自动化工具Selenium的使用。概述目前,很多网站都采用Ajax等技术进行动态加载数据,想要采集这类网站的数据,需要通过抓包对网站的数据接口进行分析,去寻找想要采集... 查看详情

python爬虫知识点总结selenium库详解(代码片段)

 一、什么是Selenium?答:自动化测试工具,支持多种浏览器。用来驱动浏览器,发出指令让浏览器做出各种动作,如下拉,跳转等。  爬虫中主要用来解决JavaScript渲染的问题。注:如果用requests,urllib这些库无法正常获取网... 查看详情

selenium+python爬虫全流程教程(代码片段)

...08;可评论或者私信)selenium测试脚本selenium实际上是web自动化测试工具,能够通过代码完全模拟人使用浏览器自动访问目标站点并操作来进行web测试。python+selenium通过python+selenium结合来实现爬虫十分巧妙。由于是模... 查看详情

从零开始,学会python爬虫不再难!!!--(13)selenium项目:自动点赞机丨蓄力计划(代码片段)

哎,兄弟们,开工了。项目我就不多做介绍,想用selenium用做爬虫的小伙伴也可以用,但是呢,还是要根据各项技术自身的优势来做开发。所以,我用selenium做个小工具吧。放码过来fromseleniumimportwebdriver#操作浏览器所需的包fromsel... 查看详情

python爬虫之web自动化测试工具selenium&&chromehandless(代码片段)

​​活动地址:CSDN21天学习挑战赛@作者:SYFStrive@创建时间:2022/8/510:42📜:Selenium&&Chromehandless🥧:点击跳转到上一篇续文🦄📋目录Selenium简介为什么使用selenium❓如何安装selenium❓s 查看详情

爬虫系列

请求库urllib使用请求库requests库使用python操作excel解析库BeautifulSoup使用解析库Xpath使用解析库pyquery使用python3用execjs执行JS代码Selenium浏览器自动化测试工具静态字体加密分析 查看详情

python爬虫-28-基于python和selenium,让你控制浏览器自动化操作

最实用的python和selenium的操作手册,分分钟掌握。1、selenium打开浏览器打开浏览器就是初始化一下,然后发起一个请求,他就会自动调用浏览器,并访问这个地址:fromseleniumimportwebdriver#指定浏览器驱动的位置Driver_path=rC:\\Users\\227... 查看详情

python-爬虫之selenium(代码片段)

...:FSA全栈行动👋一、Selenium的介绍Selenium是一个Web自动化测试工具,最初是为网站自动化测试而开发,Selenium可以直接调用浏览器,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器),可... 查看详情

selenium模块的基本使用(代码片段)

...selenium库与requests库的区别-selenium请求库:-本质上是一个自动化测试模块;--->主要用于测试UI界面-selenium除了可以做自动化测试,还可以做爬虫;*******-selenium可以帮我们打开(驱动)浏览器,然后往目标网站发送请求,获取响应数... 查看详情