發表文章

目前顯示的是 2月, 2023的文章

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)的概念

Selenium WebElement

Command WebDriver.find_element(By.ID) 透過 id 欄位查詢網頁元件 WebDriver.find_element(By.NAME) 透過 name 欄位查詢網頁元件 WebDriver.find_element(By.CLASS_NAME) 透過 class 欄位查詢網頁元件 WebDriver.find_element(By.LINK_TEXT) 透過連結文字查詢網頁元件 WebElement.is_selected() 檢查checkbox網頁元件是否被選取 WebElement.clear() 清除網頁元件所有輸入文字 WebElement.send_keys(*value) 模擬輸入文字到網頁元件 WebElement.get_attribute() 取得網頁元件的屬性 WebElement.get_property() 取得網頁元件的屬性 Reference by.py webdriver.py webelement.py WebDriver API - WebElement 查找元素 selenium get_attribute的几种用法 what is the difference between 'property' and 'attribute' in Selenium WebElement? selenium+python自动化101-使用execute_script() 方法获取 JavaScript 返回值 【Day 20】- 讓 Selenium 去 Dcard 上自動向下捲動 (實戰 Selenium 模擬使用者划手機 2/2) 解决Selenium中用find_elements_by_xpath()无法获取属性值问题 selenium之 搞定checkbox、radiobox

selenium alert/popup window

Command alert = browser.switch_to_alert() 取得對話框物件 alert = browser.switch_to.alert 取得對話框物件 alert.accept() 按下 OK 按鈕 alert.dismiss() 按下 Cancel 按鈕 alert.text 取得對話框文字 from selenium.webdriver.support import expected_conditions expected_conditions.alert_is_present()(browser) 用來檢測是否有 alert 視窗 Demo from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException browser = webdriver . Firefox() browser . get( "url" ) browser . find_element_by_id( "button" ) . click() try : WebDriverWait(browser, 3 ) . until(EC . alert_is_present()) alert = browser . switch_to . alert alert . accept() print ( "alert accepted" ) except TimeoutException: print ( "no alert" ) Reference alert.py WebDriver API - Alerts Check if any alert exists using selenium

Python Selenium on Windows 10

Install(Ubuntu) python pip install selenium 下載 https://github.com/mozilla/geckodriver/releases/download/v0.32.2/geckodriver-v0.32.2-win64.zip 解壓 geckodriver-v0.32.2-win64.zip 到 C:\Program Files 解壓後有一個檔案 geckodriver.exe 這是要給 selenium 執行 firefox 的必要檔案。 Test from selenium import webdriver browser = webdriver . Firefox(executable_path = r'C:\Program Files\geckodriver.exe' ) browser . get( 'https://trendoceans.com/blog' ) print ( 'Title: %s' % browser . title) browser . quit() 執行 webdriver.Firefox() 時要指定 geckodriver 的位置,執行完後會跳出一個 firefox 視窗。 執行 browser.get() 後 firefox 視窗會載入網頁。 執行 browser.quit() 後會結束 firefox 視窗。 Debug Reference Selenium with Python中文翻译文档 How to Install and setup Selenium with Firefox on Ubuntu how to install Firefox web driver for windows?

Python Selenium on Ubuntu

Install sudo apt install python3-pip pip3 install selenium wget https://github.com/mozilla/geckodriver/releases/download/v0.32.2/geckodriver-v0.32.2-linux64.tar.gz tar zxvf geckodriver-v0.32.2-linux64.tar.gz 解壓後有一個檔案 geckodriver 這是要給 selenium 執行 firefox 的必要檔案。 sudo tar zxvf geckodriver-v0.32.2-linux64.tar.gz -C /usr/sbin 直接把 geckodriver 解壓到 /usr/sbin 就不用指定執行位置了。 Test from selenium import webdriver browser = webdriver . Firefox(executable_path = "./geckodriver" ) browser . get( 'https://trendoceans.com/blog' ) print ( 'Title: %s' % browser . title) browser . quit() 執行 webdriver.Firefox() 時要指定 geckodriver 的位置,執行完後會跳出一個 firefox 視窗。 執行 browser.get() 後 firefox 視窗會載入網頁。 執行 browser.quit() 後會結束 firefox 視窗。 Debug $ python3 Python 3.6.9 (default, Jan 26 2021 , 15 : 33 : 00 ) [GCC 8.4.0 ] on linux Type "help" , "copyright" , "credits" or "license" for more information . >>&g

Python 函數中的冒號跟箭頭 (Type Hints)

Reference Python函数参数中的冒号与箭头 PEP 484 – Type Hints typing —— 类型注解支持 Type hints in namedtuple Python Type Hints 教學 Type Hints的野心 全面理解Python中的类型提示(Type Hints) 使用 Python typing 模組對你的同事好一點

Python 的 struct

dataclasses --- Data Classes

Python book

PDF Python 旋風之旅     online Python 教學  (官方) Python 語言參考手冊  (官方) Python 標準函式庫 (Standard Library)  (官方) Python 3 入门指南 Python 2 入门指南 简明 Python 教程 深入 Python 2  (Dive Into Python) 深入 Python 3 Python 2 基础教程 Python 3 教程 Python 旋風之旅 Python进阶  (Intermediate Python) Python教程  (廖雪峰) Python - 100天从新手到大师 Python进阶 Python进阶 Tkinter Graphical User Interfaces with Tk Tkinter 教學 Tkinter Open File Dialog Comprehension 列表推導式 Python Comprehension語法應用教學 [Python]B10─列表推導(list comprehension) urllib Python請求標準庫 urllib 與 urllib3 Python urllib3模块详解 Reference 为什么很多Python开发者写GUI不用Tkinter,而要选择PyQt和wxPython或其他?