1. 程式人生 > >瀏覽器自動化操作(Web Browser Automation)(一)

瀏覽器自動化操作(Web Browser Automation)(一)

前言:之前靠網上的大佬帶,學了一點也算是爬蟲的一個東西——瀏覽器自動化,現在算是整理總結或者是回報社會吧x

準備:① Python 3.6

           ② selenium

裝好這兩個東西就可以開始我們的爬蟲之旅了,下面以從12306網站抓取車次資訊為案例學習這個庫。

瀏覽器自動化操作大體分為兩步——定位操作,而其中最重要的是定位,因為定位是最困難的並且只有定位到了想要的位置才能進行後續的操作。

from selenium import webdriver
x=webdriver.Chrome(r'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe') 
#這是我的chromedriver的絕對路徑,我是預設安裝的,所以可以作為新手的參考
x.get('http://www.12306.cn/')

執行這段程式碼可以看到彈出了一個chrome瀏覽器,並跳轉到了12306的主頁上。因為我們想抓取車次資訊,所以我們首先要進去那個車次資訊的頁面,所以我希望能點選一下那個【餘票查詢】——這句話包含了兩層含義:①定位到【餘票查詢】②點選。

實際上網頁一般是用html語言編寫的,所以所有東西都是一句或一段的程式碼,我們需要一個規則,讓我們找到那個地方。幸運的是,我們只要檢查一下那個位置即可知道哪裡的程式碼是什麼。

然後在右邊可以看到它的html程式碼。

可以看到它有一個class屬性,且屬性為class='k4',所以我們首先學習第一個定位函式find_element_by_class_name

left = x.find_element_by_class_name('k4')

要注意的是,定位時一定要注意規則是否唯一指向,否則定位到的可能不是自己想要的。

這個時候就定位到了【餘票查詢】的位置了,然後再進行操作——點選,

left.click()

於是就彈到了【餘票查詢】中來了。

其實還有另外一個函式find_elements_by_class_name,注意到其實這裡就多了一個s,所以它返回的並不是一個WebElement,而是一個WebElement的列表,即使列表中只有一個WebElement元素。

恭喜你,我們現在已經會寫第一個瀏覽器自動化操作——所謂爬蟲了。

其實定位和操作的方法還有很多,回到剛才的位置(手動叉掉新彈出來的視窗就行,至於為什麼沒有影響,我們下次再說),我們用其他方法來定位。

從這裡我們能看到html程式碼中還有許多不同的屬性比如id、href等,並且html程式碼呈很明顯的層次結構,所以下面介紹一個萬能定位函式find_element_by_xpath(或find_elements_by_xpath)。

left = x.find_elements_by_xpath('//div[@id="indexLeftBL"]/ul/li')[5] 
# 因為它在第6個li
left.click()

另外,所有定位函式都是可以接在其他定位函式(和自己)後面繼續定位的,例如

left = x.find_element_by_id('indexLeftBL').find_elements_by_xpath('ul/li')[5]
# 注意這裡不能再像之前那樣/或//了
left.click()

定位函式還有:

x.find_element_by_css_selector()
x.find_element_by_link_text()
x.find_element_by_name()
x.find_element_by_partial_link_text()
x.find_element_by_tag_name()

以及它們的find_elements_by_x函式。

常用的操作還有:

.text # 取文字

其他更多更詳細的可以直接啃原始碼或者檢視selenium的技術文件,多練練自然就懂了。

如有疑問或建議,可以聯絡郵箱 [email protected]

相關推薦

瀏覽器自動化操作Web Browser Automation

前言:之前靠網上的大佬帶,學了一點也算是爬蟲的一個東西——瀏覽器自動化,現在算是整理總結或者是回報社會吧x 準備:① Python 3.6            ② selenium庫 裝好這兩個東西就可以開始我們的爬蟲之旅了,下面以從12306網站抓取車次資訊為案

【軟考】——軟體工程基礎知識Web應用系統分析與設計

WebApp的特性 WebApp屬性???——》網路密集性、併發性、無法預知的負載量、效能、可用性、資料驅動; web應用系統分析的模型型別???——》 內容模型???——》給出由Web應

在網頁中嵌入百度、谷歌搜尋Web搜尋與站內搜尋

百度:  <SCRIPT language=javascript>   function g(formname)    {   var url = "http://www.baidu.com/baidu";   if (formname.s[1].checked)

eclipes建立一個web專案web.xml不能自動更新的原因web.xml和@WebServlet的作用

在eclipse中建立一個Web專案的時候,雖然有web.xml生成,但是再新增Servlet類檔案的時候總是看不見web.xml的更新,所以異常的鬱悶!上網查了查,原來我們在建立Web專案的時候,會彈出一個對話方塊,“Dynamic web module version”

idea配置application contextweb專案的預設訪問路徑

idea的application context   eclipse大家應該都用過,eclipse訪問專案的路徑一般是localhost:8080/projectName, 當把IDE換成idea以後,訪問路徑一般情況下就變成了localhost:8080,路

Python實現瀏覽器自動化操作

程式碼----------------------------------------#coding=utf-8import timefrom splinter import Browserdef splinter(url): browser = Browser('chrome') #login 126 em

MyBatis 關聯查詢一對多 & 多對

1、一對多 舉個例子:一個國家有很多人。一對多 1)表結構 -- 國家country CREATE TABLE `country` ( `cid` int(5) NOT NULL AUTO_INCREMENT, `cname` varchar(20) NOT NULL, PR

Android第一行程式碼實驗活動的最佳實踐

活動的最佳實踐    1.知曉當前是在哪一個活動         這個技巧將教會你,如何根據程式當前的介面就能判斷出這是哪一個活動。  首先需要新建一個 BaseActivity 繼承自

hibernate 關聯關係配置一對多,多對

Hibernate 關聯關係:        1. 什麼是關聯(association)            1.1 關聯指的是類之間的引用關係。如果類A與類B關聯,那麼被引用的類B將被定義為類

hibernate關聯關係一對多、多對

1.什麼是關聯關係? 關聯關係是指兩個實體或者表有相互關聯,比如在學生表中,學生表有班級id,那麼學生表中的班級id就關聯班級表中班級Id欄位。因此關聯關係,可以看成是一種外來鍵關係。 2.為什麼要有關聯關係? 為了實現級聯操作,刪除班級中某個學生,會連帶刪除學生表中的

CSAPP lab1 datalab-handout深入瞭解計算機系統 實驗

能看懂的就不寫註釋了 /* * CS:APP Data Lab * * <Please put your name and userid here> * * bits.c - Source file with your sol

微信小程式看文件寫例項微信小程式計算器例項

Page({ data: { back: 'back', C: 'C', addSub: 'addSub', add: '+', sub: '-', mut: '×', div: '÷', equ: '=', histor

小例子點選按鈕數值加

<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>W3Cschool教程 React 例項</title> <script

敵兵佈陣 樹狀陣列應用型別【單點更新與區間求和】

題目連線:http://acm.hdu.edu.cn/showproblem.php?pid=1166 Problem Description C國的死對頭A國這段時間正在進行軍事演習,所以C國間諜頭子Derek和他手下Tidy又開始忙乎了。A國在海岸線沿直線佈置了N個

MyBatis 關聯查詢 自關聯 一對多、多對

所謂自關聯是指,自己即充當一方,又充當多方。其實就是普通1:n 和 n:1的變形 1、一對多 1)表結構 -- 新聞欄目 CREATE TABLE `news` ( `id` int(5) NOT NULL AUTO_INCREMENT, `name` varcha

Effective Java靜態工廠與構造器

前言:因為是直接看完Think in Java後就入手Effective Java的,所以在閱讀的過程中難免有些不懂,便以一種閱與查的方式很費勁的去儘量的多深入瞭解Java,希望在看完後能夠有很大的提升,並將這一過程所獲以筆記形式記下來 第一條的標題是考慮用靜態工廠方法代

PCL點雲庫學習(

最近在學習SLAM(同時定位與地圖構建),因此順帶學習了一下,PCL(Point Cloud Library,點雲庫)。 使用的作業系統為ROS(機器人作業系統),由於ROS集成了opencv和pc

Loading Large Bitmaps Efficiently高效載入大圖Android開發文件翻譯

原文地址:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html 注:我的英文水平確實有限,希望大家能夠指出不足之處:——),建議多閱讀官方文件,市場上很多書將思想講的比較少,一來

Web自動化框架LazyUI使用手冊7--瀏覽器常用操作API

LazyUI框架中,BrowserEmulator類提供了大量的瀏覽器操作,常用的API列舉如下:1. 基本操作/** * Open the URL * 開啟一個URL * @param url * t

9. Web browser-related 網頁瀏覽器相關 4個

ted fire org 代碼 ref 內容 隱藏 javascrip script Firefox NoScript是Firefox的插件,可以阻止JavaScript,Java,Flash和其他插件內容(允許您選擇性地重新啟用某些站點)。 它還提供跨站點腳本保護。 這主