python網路資料探勘--JS隱式等待和顯式等待
阿新 • • 發佈:2019-01-23
第一部分:隱式等待和顯式等待
隱式等待和顯式等待的不同之處在於,隱式等待是等DOM中某個狀態發生改變後再繼續執行程式碼(沒有明確的等待時間,但是有最大等待期限,只要在時限內就可以),而顯式等待明確設定了等待時間,如上篇文章中等待三秒鐘。在隱式等待中,DOM被觸發的狀態是用expected_conditions定義的(前面使用了別名EC,是經常使用的簡稱)。在Selenium庫裡面元素被觸發的期望條件(expected conditions)有很多種,包括:
- 彈出一個提示框
- 一個元素被選中(比如文字框)
- 頁面的標題改變了,或者某個文字顯示在頁面上或者某個元素裡
- 一個元素在DOM中變成可見的,或者一個元素從DOM中消失了。
在下面的示例中,一個定位器被用來查詢id是loadedButton的按鈕:
EC.presence_of_element_located((By.ID,"loadedButton"))
定位器還可以用來建立選擇器,配合WebDriver的find_element函式使用:
這行程式碼功能和上面的程式碼的功能是一致的:print(driver.find_element(By.ID,"content").text)
print(driver.find_element_by_id("content").text)
如果你可以不用定位器,就不要用,畢竟可以少匯入一個模組。但是,定位器是一種十分方便的工具,可以用在不同的應用中,並且具體很好的靈活性。
下面是定位器通過By物件進行選擇的策略
- ID
- CLASS_NAME
- CSS_SELECTOR
- LINK_TEXT
- PARTIAL_LINK_TEXT
- NAME
- TAG_NAME
- XPATH
第二部分:XPath語法
XPath(XML Path,XML路徑)是在XML文件中導航和選擇元素的查詢語言。它由W3C與1999年建立,在Python、Java和C#這些語言中有時會用XPath來處理XML文件雖然BeautifulSoup不支援XPath,但是很多庫(lxml,Selenium,Scrapy等)都支援。它的使用方式通常和CSS選擇器(比如mytag#idname)一樣。雖然它原來本被設計用於處理更規範的XML文件而不是HTML文件。
在XPath語法中有四個重要概念
- 根節點和非根節點
- /div選擇div節點,只有當它是文件的根節點時
- //div 選擇文件中所有的div節點(包括非根節點)
- 通過屬性選擇節點
- //@href選擇帶href屬性的所有節點
- //a[@href='http://google.com']選擇頁面中所有指向google網站的連結
- 通過位置選擇節點
- //a[3]選擇文件中的第三個連結
- //table[last()]選擇文件中的最後一個表
- //a[position()<3]選擇文件中的前三個連結
- 星號(*)匹配任意字元或節點,可以在不同條件下使用
- //table/tr/* 選擇所有表格行tr標籤的所有的子節點(這很適合選擇th和td標籤)
- //div[@*] 選擇帶任意屬性的所有div標籤