多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

Python爬虫利器Selenium使用详解-自动化测试

更新时间:2022-04-19 09:15:17 作者:多测师 浏览:56

  用pyhon爬取动态页面时普通的urllib2无法实现,例如京东首页,随着滚动条的下拉会加载新的内容,而urllib2就无法抓取这些内容,此时就需要今天的主角selenium。

Python爬虫利器Selenium使用详解-自动化测试

  Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla Firefox、Mozilla Suite等。使用它爬取页面也十分方便,只需要按照访问步骤模拟人在操作就可以了,完全不用操心Cookie,Session的处理,它甚至可以帮助你输入账户,密码,然后点击登陆按钮,对于上面的滚动条,你只需要让浏览器滚到到最低端,然后保存页面就可以了。以上的这些功能在应对一些反爬虫机制时十分有用。接下来就开始我们的讲解正文,带领大家实现一个需要登录的动态网页的爬取。

  案例实现:

  使用selnium需要选择一个调用的浏览器并下载好对应的驱动,在桌面版可以选择Chrome,FireFox等,服务器端可以使用PhantomJS,桌面版可以直接调出来浏览器观察到变化,所以一般我们可以在桌面版用Chrome等调试好之后,将浏览器改为PhantomJS然后上传到服务器使其运行,这里我们直接以PhantomJS做演示.

  首先时导入模块:

  1 from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

  2 from selenium import webdriver

  接下来时初始化一个浏览器,参数中可以指定加载网页的一些属性:

  1 cap = webdriver.DesiredCapabilities.PHANTOMJS

  2 cap["phantomjs.page.settings.resourceTimeout"] = 180

  3 cap["phantomjs.page.settings.loadImages"] = False

  4

  5 driver = webdriver.PhantomJS(executable_path="/home/gaorong/phantomjs-2.1.1-linux-x86_64/bin/phantomjs", desired_capabilities=cap)

  上面初始了PhantomJS并设置了浏览器的路径,加载属性选择了资源加载超时时间和不加载图片(我们只关心网页文本)。在这里还可以选择其他设置。

  设置一些属性,并下载一个网页

  1 driver.set_page_load_timeout(180)

  2 driver.get('https://otx.alienvault.com/accounts/login/')

  3 time.sleep(5)

  4 driver.save_screenshot('./login.png') #为便于调试,保存网页的截图

  由于在服务器端运行难免出错,可以用save_screenshot保存当前网页的页面便于调试。

  接下来就是输入账户和密码登陆,以获取网站的Cookies,便于后面请求。

  1 #输入username和password

  2 driver.find_element_by_xpath("/html/body/div[1]/div[1]/login/div[2]/div/form/input[1]").send_keys('*****')

  3 time.sleep(1)

  4 print 'input user success!!!'

  5

  6 driver.find_element_by_xpath("/html/body/div[1]/div[1]/login/div[2]/div/form/input[2]").send_keys('****')

  7 time.sleep(1)

  8 print 'input password success!!!'

  9

  10 driver.find_element_by_xpath("/html/body/div[1]/div[1]/login/div[2]/div/form/button").click()

  11 time.sleep(5)

  上面代码使用find_element_by_xpath获取输入框的位置后输入账户和密码并点击登陆键,可以看到一些都很方便。它会自动跳转到下一个页面,我们只需要sleep几秒等待它。

  我们需要爬取的网页信息在某个特定的element里,所以我们需要判断一下这个element是否出现:

  1 try:

  2 element = WebDriverWait(driver, 10).until(

  3 EC.presence_of_element_located((By.CLASS_NAME, 'pulses'))

  4 )

  5 print 'find element!!!'

  6 except:

  7 print 'not find element!!!'

  8 print traceback.format_exc()

  9 driver.quit()

  上面判断 class为 'pulse' 这个element是否出现,如果等待10s后还未出现,则selenum会爆出TimeoutError错误。

  上面就进行了基本的初始化,然后就需要处理动态的内容了,这个网页像京东一样会随着下拉自动出现内容,所以我们需要实现下拉滚动条:

  1 print 'begin scroll to get info page...'

  2 t1 = time.time()

  3 n = 60 #这里可以控制网页滚动距离

  4 for i in range(1,n+1):

  5 s = "window.scrollTo(0,document.body.scrollHeight/{0}*{1});".format(n,i)

  6 #输出滚动位置,网页大小,和时间

  7 print s, len(driver.page_source),time.time()-t1

  8 driver.execute_script(s)

  9 time.sleep(2)

  其中driver.page_source就是获取网页文本。当滚动完毕后我们就可以调用它然后写到一个文件里。这样就完成了这个的程序逻辑。

  高级:

  用selenim可以应对常见的反爬虫策略,因为相当于一个人在浏览网页,但是对于验证码这些还需要做额外的处理,还有一点就是访问速度不能过快,毕竟他需要调用一个浏览器,如果嫌他速度慢的话我们可以在必要的时候使用他,非必要时候可以使用requests库进行操作。

  以上内容为大家介绍了自动化测试中的Python爬虫利器Selenium使用详解,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

17727591462

返回顶部