Selenium對瀏覽器的各種操作

第一步就是安裝Selenium這個模塊,當然,前提是你的python已經安裝好了

直接在dos窗口輸入

pip install selenium完成一鍵安裝

然後就可以新建一個py文件,在裏面輸入


from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0

# Create a new instance of the Firefox driver
driver = webdriver.Firefox()

# go to the google home page
driver.get("http://www.google.com")

# find the element that's name attribute is q (the google search box)
inputElement = driver.find_element_by_name("q")

# type in the search
inputElement.send_keys("cheese!")

# submit the form (although google automatically searches now without submitting)
inputElement.submit()

# the page is ajaxy so the title is originally this:
print driver.title

try:
   # we have to wait for the page to refresh, the last thing that seems to be updated is the title
   WebDriverWait(driver, 10).until(EC.title_contains("cheese!"))

   # You should see "cheese! - Google Search"
   print driver.title

finally:
   driver.quit()

這樣就打開google進行查找cheese!後打印標題並關閉瀏覽器


下面介紹各種獲取瀏覽器內的各種元素的方法

By ID

<divid="coolestWidgetEvah">...</div>
element=driver.find_element_by_id("coolestWidgetEvah")

By Class Name

<divclass="cheese"><span>Cheddar</span></div><divclass="cheese"><span>Gouda</span></div>
cheeses=driver.find_elements_by_class_name("cheese")

By Tag Name

<iframesrc="..."></iframe>
frame=driver.find_element_by_tag_name("iframe")

By Name

<inputname="cheese"type="text"/>
cheese=driver.find_element_by_name("cheese")

By Link Text

<a href="http://www.google.com/search?q=cheese">cheese</a>>
cheese=driver.find_element_by_link_text("cheese")

By Partial Link Text

<a href="http://www.google.com/search?q=cheese">search for cheese</a>

cheese=driver.find_element_by_partial_link_text("cheese")

By CSS

<divid="food"><spanclass="dairy">milk</span><spanclass="dairy aged">cheese</span></div>
cheese=driver.find_element_by_css_selector("#food span.dairy.aged")

By XPATH

<inputtype="text"name="example"/><INPUTtype="text"name="other"/>
inputs=driver.find_elements_by_xpath("//input")

(相關的XPATH教程具體可以參考W3C的教程進行學習)

Using JavaScript

這麼這是兩個例子,例子一需要提前加載jqury的支持

element=driver.execute_script("return $('.cheese')[0]")

labels=driver.find_elements_by_tag_name("label")inputs=driver.execute_script("var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){"+"inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;",labels)


User Input - Filling In Forms

select=driver.find_element_by_tag_name("select")allOptions=select.find_elements_by_tag_name("option")foroptioninallOptions:print"Value is: "+option.get_attribute("value")option.click()

有些選擇提取的元素是需要進行篩選的如

# available since 2.12fromselenium.webdriver.support.uiimportSelectselect=Select(driver.find_element_by_tag_name("select"))select.deselect_all()select.select_by_visible_text("Edam")

那麼這些form進行如何提交呢?

driver.find_element_by_id("submit").click()
element.submit()

Moving Between Windows and Frames

<a href="somewhere.html"target="windowName">Click here to open a new window</a>

driver.switch_to_window("windowName")

driver.switch_to_frame("frameName")

driver.switch_to_frame("frameName.0.child")


切換一些彈出來的比如登錄框等

Popup Dialogs

這類的有alerts, confirms, and prompts等


alert=driver.switch_to_alert()

返回的是一個彈窗的窗體對象

Cookies

# Go to the correct domaindriver.get("http://www.example.com")# Now set the cookie. Here's one for the entire domain# the cookie name here is 'key' and its value is 'value'driver.add_cookie({'name':'key','value':'value','path':'/'})# additional keys that can be passed in are:# 'domain' -> String,# 'secure' -> Boolean,# 'expiry' -> Milliseconds since the Epoch it should expire.# And now output all the available cookies for the current URLforcookieindriver.get_cookies():print"%s -> %s"%(cookie['name'],cookie['value'])# You can delete cookies in 2 ways# By namedriver.delete_cookie("CookieName")# Or all of themdriver.delete_all_cookies()


Changing the User Agent

profile=webdriver.FirefoxProfile()profile.set_preference("general.useragent.override","some UA string")driver=webdriver.Firefox(profile)

Drag And Drop

fromselenium.webdriver.common.action_chainsimportActionChainselement=driver.find_element_by_name("source")target=driver.find_element_by_name("target")ActionChains(driver).drag_and_drop(element,target).perform()


具體的詳細用法可以參考官方文檔:http://docs.seleniumhq.org/docs/03_webdriver.jsp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章