2019年7月17日 星期三

Ubuntu 18.04.1 mysql password settings, and can be set without sudo login

Description:

After installing Ubuntu 18.04.1 , you cannot execute the mysql command as a user. You must use sudo to execute the mysql directive, and any php program may not be able to connect to mysql.


Step1: Login to the mysql interface
example:
Sudo mysql -uroot -p
Enter password: [press Enter directly]

Step2: Modify the account management mode and change password
mysql> Use mysql;
mysql> Update user SET plugin='mysql_native_password' WHERE User='root';
mysql> Update user set authentication_string=password('root new password') where user='root';
mysql> Flush privileges;

Step3: After logging out, you can use the following mysql command without adding sudo

2019年5月29日 星期三

Hide black console window

Step1: First package according to common procedures

Need pyinstaller
example:
First reach the location of this scripts
cd C:\Python27\Scripts
Then enter

pyinstaller -F D:\Wayne\file.py --distpath D:\Wayne
At this time, the folder will be generated on the desktop. build, dist
There is also a protagonist of "Archive.spec"
Open "Profile.spec" with Notepad
One of them is like this

Exe = EXE(pyz,
          A.scripts,
          A.binaries,
          A.zipfiles,
          A.datas,
          [],
          Name='my file',
          Debug=False,
          Bootloader_ignore_signals=False,
          Strip=False,
          Upx=True,
          Runtime_tmpdir=None,
          Console=True )
Change the console=True to console=False

Step2: Repackageirst

Note that this packaged project is a .spec file.
First reach the location of this scripts

cd C:\Python27\Scripts
Then enter
pyinstaller -F D:\Wayne\file.spec --distpath D:\Wayne

You're done, your file will not have a small black frame when you go down.

2019年5月2日 星期四

Ubuntu server 安裝 teamviewer 和使用 teamviewer

Step1: create a folder to save, download the TeamViewer installation package

mkdir ~/downloads/ 
cd ~/downloads/ 
wget https://download.teamviewer.com/download/teamviewer_i386.deb

Step2: TeamViewer installation package

sudo dpkg -i teamviewer_i386.deb
cd /opt/teamviewer/tv_bin
Teamviewer --setup console #Set the startup mode to console startup
Teamviewer --daemon restart #restart teamview service
Sudo teamviewer --passwd 112358 #Set password
Teamviewer --info #teamview # View id

If you get an error, and the content is as follows:
Sudo apt-get install libdbus-1-3:i386 libasound2:i386 libexpat1:i386 libfontconfig1:i386 libfreetype6:i386 libjpeg62:i386 libpng12-0:i386 libsm6:i386 libxdamage1:i386 libxext6:i386 libxfixes3:i

Then execute the command:
sudo apt-get update
sudo apt-get install -f

These two commands are fine.
After this, it will not succeed. When you log in, you will get an error. Failed to start session You can use Ctrl + Alt +F1 to enter the command line and login is OK.

2019年3月19日 星期二

python 測試框架工具

Python的測試框架

Unit frameworks單元測試框架
  • Framework
  • unittest  - python自帶的單元測試庫,開箱即用
  • unittest2  - 加強版的單元測試框架,適用於Python 2.7以及後續版本
  • pytest  - 成熟且功能強大的單元測試框架
  • plugincompat  - pytest的執行及兼容性插件
  • nosetests  - 讓python測試更容易一點
  • slash  - python實現的單元測試框架
  • Extension
  • proboscis  - 仿TestNG擴展了unittest模塊以及Nose的功能
  • grail  -可以讓你一步一步編寫測試用例的庫
  • Testify  - 單元測試框架,提供了加強型夾具,用例切割並行運行,testrunner高亮及詳盡的日誌和報告功能
  • trial  - unittest模塊的擴展,提供了命令行的testrunner工具以及代碼覆蓋率的整合,跟鼻差不多
  • subunit  - 提供了unittest在另一個進程執行用例並彙總測試數據的能力
  • testresources  - 提供了多用例間管理測試數據的機制,兼容unittest
  • testtools  - 為Twisted和Bazaar提供的unittest擴展
  • Sancho  - 運行用例,並為失​​敗的用例提供報告,但僅限於此
  • zope.testing  - testrunner,提供了不錯的debuge能力,並且集成了代碼覆蓋率。可以跟zope項目使用,也可以用在非zope項目上
  • pythoscope  - 自動或半自動為遺留的python系統創建測試用例的工具
  • testlib  - 更強大的unittest,更多的斷言,支持模塊級的設置/拆解,跳過測試等...
  • dutest  - 面向對象的接口,用於從doctests中檢索unittest測試用例。通過允許每個交互式示例的setUp和tearDown來隱藏doctests的初始化。允許控制doctest提供的所有選項。專用類允許跨包層次結構進行選擇性測試發現。
  • green  - 綠色是一個簡潔多彩的testrunner,跟鼻很像
  • ddt  - 讓unittest支持數據驅動
  • pytractor  Selenium python bindings的擴展。目的是讓角項目的測試更簡單
TDD ATDD BDD測試框架

  Assertion
  • pyshould  - 基於pyhamcrest的風格斷言
  • pyhamcrest  - python版的Hamcrest matchers
  • sure  -python實現的測試庫,提供了強大靈活的斷言
  • assertpy  - 巨簡單的python單元測試斷言庫,提供了優雅流利的API。支持Python 2和3。

Discipline
  • mock  - python實現的Mocking和Patching庫
  • Ludibrio  - 用python實現的優雅的測試雙框架(模擬,存根,間諜和假人)。
  • 回复  - mock請求的Python測試工具庫
  • doublex  - 強大的test double frame框架
  • freezegun  - 通過mocking datetime模塊實現時光穿梭
  • httpretty  - HTTP請求的模擬工具
  • httmock  - 要求的模擬工具,支持Python 2.6+和3.2+。
  • 偽裝者  - 測試用的假服務器
  • mock-server  - 簡單的mock sever,支持REST和XML-RPC API,還有基於tornado的管理界面
  • VCR.py  - 自動模擬HTTP交互讓測試更簡單快速

Python的測試數據生成及代碼掃描工具

測試數據操作測試數據的操作和處理
代碼分析代碼掃描及分析

  • pysonar2  - 類型推斷
  • coverage  - 覆蓋率
  • pycallgraph  - 流程可視化
  • Flake8  - 模塊化源代碼檢查器:pep8,pyflakes和co。
  • pylama  - Python和JavaScript的代碼審查工具
  • pylint的  -源代碼分析器
  • hacking  - OpenStack黑客風格檢查(flake8插件)。
  • prospector2  - 代碼分析工具,可以輸出錯誤信息,潛在問題,不規範的代碼以及代碼複雜度

Python的自動化測試工具

Web UI測試自動化Web UI自動化
  • 函式庫
  • selenium webdriver  - 瀏覽器自動化工具
  • splinter  - 簡單的web自動化工具,讓元素定位,表單提交等更加容易
  • mechanize  - 有狀態可編程的瀏覽器
  • 框架和包裝框架和封裝
  • py.saunter  - 有主見的自動化測試框架,使用了selenium RC和webdriver api
  • moz-web-qa  - py.test的插件,為Mozilla的WebQA項目提供了額外功能
  • testutils sst  - 一個Web測試框架,它使用Python生成基於瀏覽器的功能測試。
  • wtframework  - 讓web測試可以配置的框架
  • holmium.core  - Page Object及其他工具庫支持
  • robotframework-selenium2library  - Robot Framework的selenium擴展
  • gocept.selenium  - selenium RC的API,適合編寫基於WSGI,Plone,Zope 2,ZTK或Grok應用的測試用例
  • webium  - 基於python的一個Page Object實現
  • robotframework-anywherelibrary  - Robot Framework的擴展庫,使用selenium2測試web應用,使用appium測試移動應用
  • robotframework-pageobjects  - 一個不錯的Page Object實現,可以脫離機器人框架單獨使用。具體看這裡
  • elementium  - 用jQuery風格的語法糖來實現瀏覽器的自動化測試用例
  • slickqa  - slick -webdriver-python項目是python selenium binding的一個封裝
  • selene  - 簡明的UI測試用例,使用python實現支持Ajax,PageObjects和Widgets
  • hitch  - 編寫基於service的應用的測試用例
  • Needle  - Needle是基於圖片比對的測試工作,它可以對web應用的一部分進行截圖,然後跟預期結果的圖片進行比對
  • PyPOM  - PyPOM是另一個Page Object庫,適用於Selenium和Splinter測試
  • POM  - POM是Page-Object-Model微框架,目的是讓Web UI測試更加簡單,快速和有樂趣
  • websmith  - Web測試的一套 DSL
  • pages  - 輕量的頁面對像庫和組建
  • widgetastic  - RedHat UI小部件組建框架
  • navmazing  - 來自RedHat的基於頁面對象的導航
  • nightwatch  -基於蟒蛇和硒的UI自動化測試框架。靈感來源於nightwatch.js
  • 擴展
  • webdriver_manager  - 主要目的是讓不同版本的瀏覽器driver管理起來更加方便
  • pytest_splinter  - pytest spinter和selenium的集成
  • lettuce_webdriver  - Selenium webdriver的生菜封裝
  • Browsermob Proxy  - python的Browsermob Proxy封裝
  • FireRobot  - 一個Firefox的擴展,讓你可以更高效的編寫基於機器人框架的selenium用例
  • pytractor  - Python的selenium擴展,以便更好的測試angular.js應用
  • Selenium-Requests  - 擴展Selenium WebDriver類,包括了Requests庫的一些功能,可以更方便的處理cookie和請求頭
  • selenium-respectful  - selenium的封裝,可以並行訪問站點
行動裝置 - 自動化測試工具

  • appium  - 開源的自動化測試框架,可以測試native / hybrid / mobile web應用。核心是基於webdriver協議進行了擴展
  • Winium.StoreApps  - 開源的自動化測試用具,用來測試Windows Store應用,實現了Selenium Remote WebDriver
  • robotframework-androidlibrary  - Robot Framework 用來測試android應用的擴展庫
  • robotframework-appiumlibrary  - appium的RobotFramework擴展
  • robotframework-ioslibrary  -Robot的ios測試擴展庫
  • uiautomator  - Android uiautomator的python封裝,支持Android 4.1+
  • ATX  - 智能機自動化測試工具。支持iOS,Android,WebApp和遊戲
Windows UI測試自動化Windows的UI測試工具

  • Winium.Desktop  - 測試Windows應用(主要是基於WinForms和WPF平台)的自動化測試工具。實現了Selenium Remote WebDriver協議
  • PyAutoGUI  - 跨平台的GUI測試工具,支持通過python腳本控制鍵盤和鼠標
  • robotframework-autoitlibrary  - Robot Framework的windows GUI測試擴展
  • autopy  - 簡單跨平台的GUI測試工具集
  • UISoup  - 支持windows和MacOS平台的UI自動化(僅工作在x86平台)
  • pywinauto  - 非常有python面向對像風格的GUI測試庫,現已支持64位機器以及py2和py3
  • SikuliX  - 基於OpenCV的GUI測試框架,使用圖片識別技術,支持python2.7
Unix \ Linux UI測試自動化

  • ldtp  - 跨平台的linux GUI測試項目
  • fMBT  - 支持多平台的python GUI測試庫
  • SikuliX  - 基於OpenCV的GUI測試框架,使用圖片識別技術,支持python2.7
MacOS UI測試自動化MacOS UI自動化測試工具

  • ATOMac  - 通過Apple Accessibility API來測試Mac應用的python庫
  • PyAutoGUI  - 跨平台的GUI測試工具,支持通過python腳本控制鍵盤和鼠標
  • SikuliX  - 基於OpenCV的GUI測試框架,使用圖片識別技術,支持python2.7

Python安全測試API測試及性能測試資源

REST API測試REST API測試
  • Rester - 測試RESTful API的框架
  • pyresttest - REST以及API microbenchmarking工具
  • Rest - Python REST客戶端
虛擬環境虛擬環境
  • virtualenv - 創建隔離的python開發環境的工具
  • virtualenvwrapper - virtualenv的一些擴展
  • tox - 虛擬環境管理,可以在不同的python版本上進行測試和截圖
  • pew - 一些管理虛擬環境的工具
  • Vex - 在命名的虛擬環境運行命令
  • PyRun - 單文件無需按照的python版本
  • pyenv - 簡單的python版本管理
  • Tapper - 全方位的測試基礎設施。
性能和壓力與負載性能測試
  • Multi-Mechanize - 開源的性能測試框架
  • locust - 可擴展的python性能測試工具
  • Yandex.Tank - 性能及基準工具
  • pytest-benchmark - py.test的基準工具
  • Airspeed Velocity - 簡單的Python基準測試工具自帶基於web的報告
  • Grinder - 支持分佈式的負載測試框架。包含一些常規用例,比如HTTP Web服務器,SOAP和REST Web服務,和應用服務器(CORBA,RMI,JMS,EJB),以及定制化的協議。測試腳本使用的Jython和Clojure的實現
  • Tsung - 開源,支持多協議的分佈式性能測試工具。可以測試HTTP,WebDAV,SOAP,PostgreSQL,MySQL,LDAP和Jabber / XMPP服務
  • taurus - 自動化友好的持續測試工具
安全檢查安全掃描
  • sparta - 支持gui的網絡掃描工具
  • OWASP ZAP - 用python實現的OWASP ZAP-features API
  • pythem - pythem是多用途的安全測試工具

2019年1月29日 星期二

openpyxl

OpenPyXL模組:基本功能操作
l   在命令提示字元輸入pip install openpyxl,下載並安裝OpenPyXL模組。
l   開啟Excel檔與工作表:
import openpyxl
本書範例檔example.xlsx在目前工作目錄
Workbook物件代表Excel
aBook = openpyxl.load_workbook("example.xlsx")
print(type(aBook)) 
à <class 'openpyxl.workbook.workbook.Workbook'>
print(aBook.sheetnames) 
à ['Sheet1', 'Sheet2', 'Sheet3']
Worksheet物件代表工作表
aSheet = aBook["Sheet3"]
print(type(aSheet)) 
à <class 'openpyxl.worksheet.worksheet.Worksheet'>
print(aSheet) 
à <Worksheet "Sheet3">
print(aSheet.title) 
à Sheet3
bSheet = aBook.active
print(bSheet) 
à <Worksheet "Sheet1">

l   取得Excel檔工作表的儲存格:
import openpyxl
本書範例檔example.xlsx在目前工作目錄
aBook = openpyxl.load_workbook("example.xlsx")
aSheet = aBook["Sheet1"]
# Cell
物件取得儲存格的方法一
aCell = aSheet["B1"]
print(aCell) 
à <Cell 'Sheet1'.B1>
print("Row " + str(aCell.row) + ", Column " + aCell.column + " is " + aCell.value)
à Row 1, Column B is Apples
print("Cell " + aCell.coordinate + " is " + aCell.value) 
à Cell B1 is Apples
# Cell
物件取得儲存格的方法二
print(aSheet.cell(row = 1, column = 2)) 
à <Cell 'Sheet1'.B1>
print(aSheet.cell(row = 1, column = 2).value) 
à Apples
# Worksheet
物件取得使用中的欄列範圍
print(aSheet.max_row) 
à 7
print(aSheet.max_column) 
à 3

l   取得Excel檔工作表的儲存格範圍:
import openpyxl
本書範例檔example.xlsx在目前工作目錄
aBook = openpyxl.load_workbook("example.xlsx")
aSheet = aBook["Sheet1"]
# Generator
物件含有矩形範圍的Cell物件
print(list(aSheet["A1":"B2"])) 
à [(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>), (<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>)]
印出Generator物件矩形範圍的所有Cell物件
for rowCell in aSheet["A1":"C2"]:
    for iCell in rowCell:
        print(iCell.coordinate, iCell.value)
    print("---End of Row---")

l   以欄列取得Excel檔工作表的儲存格範圍:
import openpyxl
本書範例檔example.xlsx在目前工作目錄
aBook = openpyxl.load_workbook("example.xlsx")
aSheet = aBook.active
# Generator
物件含有矩形範圍的Cell物件
print(list(aSheet.rows)) 
à [(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>), …, (<Cell 'Sheet1'.A7>, <Cell 'Sheet1'.B7>, <Cell 'Sheet1'.C7>)]
print(list(aSheet.columns)[1]) 
à (<Cell 'Sheet1'.B1>, …, <Cell 'Sheet1'.B7>)
印出Generator物件矩形範圍的所有Cell物件
for iCell in list(aSheet.columns)[1]:
    print(iCell.coordinate, iCell.value)

l   欄的字母和數字之間的轉換:
import openpyxl
from openpyxl.utils import get_column_letter, column_index_from_string
print(get_column_letter(27)) 
à AA
print(column_index_from_string("AA")) 
à 27

l   建立並儲存Excel檔:
import openpyxl
aBook = openpyxl.Workbook()
print(aBook.sheetnames) 
à ['Sheet']
aSheet = aBook.active
aSheet.title = "Hello World"
print(aBook.sheetnames) 
à ['Hello World']
aBook.save("test.xlsx")

l   建立與刪除Excel檔工作表:
import openpyxl
aBook = openpyxl.Workbook()
print(aBook.sheetnames) 
à ['Sheet']
aBook.create_sheet()
print(aBook.sheetnames) 
à ['Sheet', 'Sheet1']
aBook.create_sheet(index = 0, title = "First Sheet")
print(aBook.sheetnames) 
à ['First Sheet', 'Sheet', 'Sheet1']
del aBook["Sheet"]
print(aBook.sheetnames) 
à ['First Sheet', 'Sheet1']
aBook.remove(aBook["Sheet1"])
print(aBook.sheetnames) 
à ['First Sheet']

l   將值寫入Excel檔工作表的儲存格:
import openpyxl
aBook = openpyxl.Workbook()
aSheet = aBook.active
aSheet["A1"] = "Hello World"
print(aSheet["A1"].value) 
à Hello World


OpenPyXL模組:視覺化功能操作
l   設定儲存格的字型:
import openpyxl
from openpyxl.styles import Font
aBook = openpyxl.Workbook()
aSheet = aBook.active
# Font
物件為字體Times New Roman且粗體,並指定給font屬性
aSheet["A1"].font = Font(name = "Times New Roman", bold = True)
aSheet["A1"] = "Hello World"
# Font
物件為大小24點且斜體,並指定給font屬性
aSheet["C3"].font = Font(size = 24, italic = True)
aSheet["C3"] = "Hello Poor World"
aBook.save("test.xlsx")

l   設定儲存格的列高和欄寬:
import openpyxl
aBook = openpyxl.Workbook()
aSheet = aBook.active
# row_dimensions
含有RowDimension物件,可設定為0409之間
aSheet.row_dimensions[1].height = 70
# column_dimensions
含有ColumnDimension物件,可設定為0255之間
aSheet.column_dimensions["C"].width = 50
aBook.save("test.xlsx")
bBook = openpyxl.Workbook()
bSheet = bBook.active
可設定隱藏列高
bSheet.row_dimensions[1].hidden = True
可設定隱藏欄寬
bSheet.column_dimensions["C"].hidden = True
bBook.save("test2.xlsx")

l   設定儲存格的合併和取消合併:
import openpyxl
aBook = openpyxl.Workbook()
aSheet = aBook.active
aSheet.merge_cells("A1:C3")
aSheet["A1"] = "Hello World"
aBook.save("test.xlsx")
bBook = openpyxl.load_workbook("test.xlsx")
bSheet = bBook.active
bSheet.unmerge_cells("A1:C3")
bBook.save("test2.xlsx")

l   凍結窗格:
import openpyxl
本書範例檔produceSales.xlsx在目前工作目錄
aBook = openpyxl.load_workbook("produceSales.xlsx")
aSheet = aBook.active
儲存格左方和上方將被凍結,儲存格本身不凍結
aSheet.freeze_panes = "A2"
aBook.save("test.xlsx")
bBook = openpyxl.load_workbook("test.xlsx")
bSheet = bBook.active
若要解除凍結窗格,傳入None"A1"皆可
bSheet.freeze_panes = None
bBook.save("test2.xlsx")

l   繪製長條圖、折線圖、圓餅圖:
import openpyxl
aBook = openpyxl.Workbook()
aSheet = aBook.active
for i in range(1, 11):
    aSheet["A" + str(i)] = i
# Reference
物件的5個引數分別為Worksheet物件、範圍區域的左上角儲存格欄列、範圍區域的右下角儲存格欄列,第二至第五引數可只填正整數
aRefer = openpyxl.chart.Reference(aSheet, min_col = 1, min_row = 1, max_col = 1, max_row = 10)
# Series
物件
aSerie = openpyxl.chart.Series(aRefer, title = "First Series")
# Chart
物件:長條圖
aChart = openpyxl.chart.BarChart()
aChart.title = "Bar Chart Title"
aChart.append(aSerie)
aSheet.add_chart(aChart, "C1")
# Chart
物件:折線圖
bChart = openpyxl.chart.LineChart()
bChart.title = "Line Chart Title"
bChart.append(aSerie)
aSheet.add_chart(bChart, "C15")
# Chart
物件:圓餅圖
cChart = openpyxl.chart.PieChart()
cChart.title = "Pie Chart Title"
cChart.append(aSerie)
aSheet.add_chart(cChart, "C29")
aBook.save("test.xlsx")

l   繪製散佈圖:
import openpyxl
aBook = openpyxl.Workbook()
aSheet = aBook.active
for i in range(1, 11):
    aSheet["A" + str(i)] = i
    aSheet["B" + str(i)] = i**2 + 5
aRefer = openpyxl.chart.Reference(aSheet, 2, 1, 2, 10)
bRefer = openpyxl.chart.Reference(aSheet, 1, 1, 1, 10)
aSerie = openpyxl.chart.Series(aRefer, bRefer, title = "First Series")
# Chart
物件:散佈圖
aChart = openpyxl.chart.ScatterChart()
aChart.title = "Scatter Chart Title"
aChart.append(aSerie)
aSheet.add_chart(aChart, "C1")
aBook.save("test.xlsx")

Selenium模組



l   在命令提示字元輸入pip install selenium,下載並安裝Selenium模組。
l   以下以Google Chrome瀏覽器為例,下載chromedriver
ChromeDriver -WebDriver for Chrome

l   WebDriver物件與WebElement物件範例:
from selenium import webdriver
chromedriverPath = r"C:\Users\Timmy\Documents\Python\chromedriver.exe"
driver = webdriver.Chrome(chromedriverPath)
print(type(driver))
à <class 'selenium.webdriver.chrome.webdriver.WebDriver'>
driver.get("http://inventwithpython.com")
參考下列WebDriver物件方法說明
element = driver.find_element_by_class_name("display-3")
print(type(element))
à <class 'selenium.webdriver.remote.webelement.WebElement'>
參考下列WebElement物件屬性或方法說明
print(element.text) 
à Learn to Program. For Free.

l   WebDriver物件方法說明-find_element_*find_elements_*
WebDriver
物件方法find_element_*find_elements_*皆返回WebElement物件,前者尋找比對符合的第一個元素,後者尋找比對符合的所有元素串列;如果找不到,會丟出NoSuchElement例外。
返回元素標籤為test的元素(只有此方法不分大小寫,"test""TEST"都可以比對<test>元素標籤)
.find_element_by_tag_name("test")
.find_elements_by_tag_name("test")
返回元素標籤為pclass屬性的值為test的元素:
.find_element_by_css_selector("p.test")
.find_elements_by_css_selector("p.test")
返回class屬性的值為test的元素:
.find_element_by_class_name("test")
.find_elements_by_class_name("test")
返回id屬性的值為test的元素:
.find_element_by_id("test")
.find_elements_by_id("test")
返回name屬性的值為test的元素:
.find_element_by_name("test")
.find_elements_by_name("test")
返回完全符合網頁文字test<a>元素:
.find_element_by_link_text("test")
.find_elements_by_link_text("test")
返回部分符合網頁文字test<a>元素:
.find_element_by_partial_link_text("test")
.find_elements_by_partial_link_text("test")

l   WebDriver物件方法說明-.back().forward().refresh().quit()
點按瀏覽器下一頁按鈕:
.back()
點按瀏覽器上一頁按鈕:
.forward()
點按瀏覽器重新整理按鈕:
.refresh()
點按瀏覽器關閉按鈕:
.quit()

l   WebElement物件屬性或方法說明-.tag_name.get_attribute().text.location.is_displayed()
from selenium import webdriver
chromedriverPath = r"C:\Users\Timmy\Documents\Python\chromedriver.exe"
driver = webdriver.Chrome(chromedriverPath)
driver.get("http://inventwithpython.com")
element = driver.find_element_by_link_text("Al's blog")
返回元素標籤字串
print(element.tag_name) 
à a
返回元素屬性的值的字串
print(element.get_attribute("href")) 
à http://inventwithpython.com/blog/
返回元素文字字串
print(element.text) 
à Al's blog
返回元素位置座標
print(element.location) 
à {'x': 151, 'y': 8152}
返回元素可見與否
print(element.is_displayed()) 
à True

l   WebElement物件屬性或方法說明-.send_keys().clear().submit().is_enabled()
from selenium import webdriver
chromedriverPath = r"C:\Users\Timmy\Documents\Python\chromedriver.exe"
driver = webdriver.Chrome(chromedriverPath)
driver.get("https://mail.yahoo.com")
以下方法要對文字欄位的<input><textarea>元素進行操作
element = driver.find_element_by_id("login-username")
填寫表單
element.send_keys("Hello World")
清除表單
element.clear()
提交表單
element.submit()
返回提交的表單啟用與否
print(element.is_enabled()) 
à True

l   WebElement物件屬性或方法說明-.click().is_selected()
from selenium import webdriver
chromedriverPath = r"C:\Users\Timmy\Documents\Python\chromedriver.exe"
driver = webdriver.Chrome(chromedriverPath)
driver.get("http://www.wibibi.com/info.php?tid=190")
以下方法要對選項按鈕欄位的<input>元素進行操作
element = driver.find_element_by_name("location")
點按頁面
element.click()
返回核取方塊或選項按鈕勾選與否
print(element.is_selected()) 
à True

l   使用selenium.webdriver.common.keys模組傳送鍵盤按鍵:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
chromedriverPath = r"C:\Users\Timmy\Documents\Python\chromedriver.exe"
driver = webdriver.Chrome(chromedriverPath)
driver.get("https://nostarch.com/")
element = driver.find_element_by_tag_name("html")
參考下列Keys物件屬性說明
element.send_keys(Keys.END)

l   Keys物件屬性說明:
鍵盤的上下左右方向鍵:
Keys.UP, Keys.DOWN, Keys.LEFT, Keys.RIGHT
鍵盤的Enter按鍵和MacReturn按鍵功能相同:
Keys.ENTER, Keys.RETURN
鍵盤的Esc按鍵:
Keys.ESCAPE
其它與鍵盤按鍵名稱相同的Keys物件屬性:
Keys.TAB, Keys.F1, Keys.F2, …, Keys.F12, Keys.BACK_SPACE, Keys.DELETE, Keys.HOME, Keys.END, Keys.PAGE_UP, Keys.PAGE_DOWN

 Ubuntu has a mechanism, that is, the installed network card (NIC) will be renamed to another name when the system is booted. Although there...