發表文章

Python Source Code Encoding UTF-8

#!/usr/bin/env python3 # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By Python 程式碼或註解加入中文教學,設定 UTF-8 編碼 PEP 263 – Defining Python Source Code Encodings Correct way to define Python source code encoding

Selenium WebDriver

WebDriver.name 傳回瀏覽器的名稱,比如 chrome,firefox。 WebDriver.get(url) 取得網頁 WebDriver.execute_script() 執行 javascript。 WebDriver.execute_async_script() 非同步執行 javascript,主要用於執行 setTimeout()。 WebDriver.current_url 傳回目前瀏覽器上面的網址。 WebDriver.page_source 傳回目前網頁HTML原始碼。 WebDriver.close() 結束目前的視窗 WebDriver.quit() 結束所有的視窗 WebDriver.switch_to 切換焦點到某一個元件,比如 alert window,frame,webelement。 WebDriver.find_element() 找尋第一個相符合元件。 WebDriver.find_elements() 找尋所有相符合元件。 WebDriver.timeouts() 設定所有 timeout 時間。 WebDriver.set_page_load_timeout() 設定網頁載入 timeout 時間。 WebDriver.set_script_timeout() 設定執行 java script timeout 時間。 WebDriver.implicitly_wait() 看不懂英文 Reference webdriver.py

Selenium frame

browser.switch_to.frame(0) 切換到第一個 frame。 browser.execute_script("return location.href") 讀取此frame的 url。 browser.switch_to.default_content() 切換到原始網頁。 browser.switch_to.parent_frame() 回到上一層 frame,回到最上層後就一直停在最上層,不會有錯誤發生。 Reference selenium之 定位以及切换frame How to handle iFrame in Selenium

Selenium form submit part 2

source code import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC browser = webdriver . Firefox() start_time = time . time() browser . get( 'http://xxx.xxx.xxx' ) old_page = browser . find_element_by_tag_name( 'html' ) print ( "submit: " + str (time . time() - start_time)) browser . find_element_by_id( "save" ) . click() print ( "wait: " + str (time . time() - start_time)) WebDriverWait(browser, 60 ) . until( lambda browser: browser . execute_script( 'return document.readyState' ) == 'complete' ) print ( "readyState: " + str (time . time() - start_time)) WebDriverWait(browser, 60 ) . until(EC . staleness_of(old_page)) print ( "staleness: " + str (time . time() - start_time)) WebDriverWait(browser, 60 ) . until(EC . presence_of_element...

Selenium table data

HTML <table> <tr><td> 1 </td><td> 2 </td><td> 3 </td><td> 4 </td><td> 5 </td></tr> <tr><td> 6 </td><td> 7 </td><td> 8 </td><td> 9 </td><td> 10 </td></tr> <tr><td> 11 </td><td> 12 </td><td> 13 </td><td> 14 </td><td> 15 </td></tr> <tr><td> 16 </td><td> 17 </td><td> 18 </td><td> 19 </td><td> 20 </td></tr> </table> 讀取儲存格 以下指令都可以取得儲存格1 browser.find_elements_by_xpath("/html/body/table/tbody/tr[1]/td[1]")[0].text browser.find_elements_by_xpath("/html/body/table/tbody/tr[1]/td")[0].text browser.find_elements_by_xpath("//table[1]/tbody/tr[1]/td")[0].text browser.find_elements_by_xpath("//table/tbody/tr[1]/td")[0].text browser.find_el...

Selenium form submit

source code import time from selenium import webdriver def wait_for (condition_function): start_time = time . time() while time . time() < start_time + 60 : if condition_function(): print ( "wait: " + str (time . time() - start_time)) return True else : time . sleep( 0.1 ) raise Exception ( 'Timeout waiting' ) class wait_for_page_load ( object ): def __init__ ( self , browser): self . browser = browser def page_has_loaded ( self ): self . new_page = self . browser . find_element_by_tag_name( 'html' ) return self . new_page . id != self . old_page . id def __enter__ ( self ): print ( "enter: " + str (time . time() - start_time)) self . old_page = self . browser . find_element_by_tag_name( 'html' ) print ( self . old_page . id) def __exit__ ( self , * _): print ( "exit: " + str (time . time() - start_time)) wait_for( self . page_has_l...

python 的 module 模組 跟 package 套件

module 簡單來說就是一個 .py 檔案。 package 簡單來說就是一個目錄包含很多個 .py 檔案,這個目錄要存在一個 __init__.py 檔案。 package 也可以包含很多個 package。 import 用來載入 module 或 package。 dir() 用來顯示 module/package 所有的物件,包含屬性,方法,類別等。 type() 用來顯示變數的類別,比如 module,function,但是沒有 package,import 一個 package 也視為 module。 Reference 解析Python模組(Module)和套件(Package)的概念