【Day 18】- 像个使用者的爬虫 Selenium

前情提要

前一篇带各位实际使用了汇率爬虫并搭配 openpyxl 这个套件做到执行程序便可读取在 excel 撰写的币种,爬取该币种的汇率并更新至 excel。

开始之前

今天将与各位介绍 selenium 这个方便的动态爬虫套件,撰写 selenium 十分容易且懒人,就像在写脚本,运行也与正常人类似(比较不会被反爬虫挡)。在实际使用中,需要连结 webdriver 。

接下来请各位读者先去下载对应 chrome 浏览器版本的 webdriver,记得要将 webdriver 放到专案路径下(与 Python 程序同个路径)。

https://chromedriver.chromium.org/downloads


接下来下载 Selenium

pipenv install selenium

开启与进入网页

可以执行该程序看是否会出现浏览器视窗。

from selenium import webdriver
driver = webdriver.Chrome()

进入网页

driver.get(url)

查找元素

selenium 提供非常多种方法来锁定元素,使用上也非常直白,以下列出锁定单一元素的用法(若有多个符合回传第一个)。

driver.find_element_by_id()
driver.find_element_by_name()
driver.find_element_by_xpath()
driver.find_element_by_link_text()
driver.find_element_by_partial_link_text()
driver.find_element_by_tag_name()
driver.find_element_by_class_name()
driver.find_element_by_css_selector()

接下来列出可回传所有的符合元素的用法,会回传一个 list。其实也就是 element 後面加个 s。

driver.find_elements_by_name()
driver.find_elements_by_xpath()
driver.find_elements_by_link_text()
driver.find_elements_by_partial_link_text()
driver.find_elements_by_tag_name()
driver.find_elements_by_class_name()
driver.find_elements_by_css_selector()

操作

  • 传入文字
element = driver.find_element_by_id("owo")
element.send_keys("password")
  • 清空文字
element = driver.find_element_by_id("owo")
element.clear()
  • 点击按钮
element = driver.find_element_by_id("button")
element.click()
  • 送出表单
element = driver.find_element_by_id("owo")
element.submit()

关闭

关闭视窗

driver.close()

关闭浏览器

driver.quit()

结语

今天带各位稍微走过了一遍 Selenium 基本用法,熟用了以上用法其实就能模拟大部分使用者操作了,另外的用法将在之後与各位娓娓道来。

其实 Selenium 使用上十分容易,像极了写脚本的过程,常用於模拟使用者的动态爬虫。

明日内容

明天会带各位实战 Dcard 爬虫,爬取 Dcard 上的文章,会让爬虫帮我们滑手机欧><。

补充资料

Selenium with Python docs : https://selenium-python.readthedocs.io/

Selenium docs : https://readthedocs.org/projects/selenium-python/downloads/pdf/latest/


<<:  第18车厢-动ㄘ动ㄘ!tab页签切换+轮播应用篇

>>:  谁喜欢这则贴文,初探 case...when 用法,Ruby 30 天刷题修行篇第十六话

[Day26]用SEED来体验漏洞吧

讲完漏洞赛制、实体密室逃脱之後,还有什麽可以实际玩看看漏洞呢? 另外想跟大家分享的是可以实作的靶机:...

D02 / 怎麽看到我在写什麽? - @Preview

今天大概会聊到的范围 @Preview annotation 及相关用法 原先的 xml 的 la...

D3JsDay14不想图表被冰冻,那就做一点互动—事件互动

什麽是互动?简单说希望能够让使用者允许监听和分派事件,用比较白话的一点方式举例就是当我们滑鼠按下某个...

聊招募前,先问问你了解自己吗?

成为公司的一份子大都是经由招募流程而加入的,但某一天团队需要扩大或是人手不足,而你刚好有机会可以参与...

Day27 简易小键盘小实作2

接续昨天 我们在按钮的action里加入这段程序码, 变数tag-1的部分就是按下1时呈现的数字是刚...