123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- '''
- @Auther :liuyuqi.gov@msn.cn
- @Time :2018/4/11 15:31
- @File :test-phantomjs.py
- '''
- # from splinter import Browser
- import splinter
- url_home="http://blog.yoqi.me/archives/4387"
- def t1():
- browser = splinter.Browser("phantomjs", executable_path="D:/Program-Files/phantomjs-2.1.1-windows/bin/phantomjs.exe")
- browser.visit(url_home)
- print(browser.title)
- def t2():
- browser=splinter.Browser("chrome",executable_path="C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
- browser.visit(url_home)
- print(browser.title)
- def t22():
- browser=splinter.Browser("firefox")
- browser.visit(url_home)
- print(browser.title)
- def t3():
- b = splinter.Browser('chrome')
- url = 'https://kyfw.12306.cn/otn/leftTicket/init'
- b.visit(url) #访问网址
- first_found = b.find_by_id('login_user').click()
- b.fill('loginUserDTO.user_name', '12306账号')
- b.fill('userDTO.password', '12306密码')
- input()
- sec_found = b.find_by_id('selectYuding').click()
- b.cookies.add({'_jc_save_fromStation': '%u4E0A%u6D77%2CSHH'})
- b.cookies.add({'_jc_save_toStation': '%u6D1B%u9633%2CLYF'})
- b.cookies.add({'_jc_save_fromDate': '2017-02-17'})
- b.cookies.add({'_jc_save_toDate': '2017-02-19'})
- b.reload()
- third_found = b.find_by_text(u'查询').click()
- b.find_by_text(u'预订')[4].click()
- def t4():
- with splinter.Browser() as browser:
- url = "https://www.baidu.com"
- browser.visit(url)
- browser.fill('q', 'splinter - python acceptance testing for web applications')
- # Find and click the 'search' button
- button = browser.find_by_name('btnG')
- # Interact with elements
- button.click()
- if browser.is_text_present('splinter.readthedocs.io'):
- print("Yes, the official website was found!")
- else:
- print("No, it wasn't found... We need to improve our SEO techniques")
- # browser type
- browser = splinter.Browser('chrome')
- browser = splinter.Browser('firefox')
- browser = splinter.Browser('zope.testbrowser')
- # Managing Windows
- browser.windows # all open windows
- browser.windows[0] # the first window
- browser.windows["window_name"] # the window_name window
- browser.windows.current # the current window
- browser.windows.current = browser.windows[3] # set current window to window 3
- # splinter api不提供但是可以通过其他来搞定的,比如通过driver来设置window的大小。
- browser.driver.set_window_size(1600, 1000)
- window = browser.windows[0]
- window.is_current # boolean - whether window is current active window
- window.is_current = True # set this window to be current window
- window.next # the next window
- window.prev # the previous window
- window.close() # close this window
- window.close_others() # close all windows except this one
- # Reload/back/forward a page
- browser.reload()
- browser.back()
- browser.forward()
- # get page tile /page content /url
- browser.title
- browser.html
- browser.url
- # change Browser User-Agent
- b = splinter.Browser(user_agent="Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en)")
- # Finding elements,returns a list with the found elements
- browser.find_by_css('h1')
- browser.find_by_xpath('//h1')
- browser.find_by_tag('h1')
- browser.find_by_name('name')
- browser.find_by_text('Hello World!')
- browser.find_by_id('firstheader')
- browser.find_by_value('query')
- # get element
- first_found = browser.find_by_name('name').first
- last_found = browser.find_by_name('name').last
- second_found = browser.find_by_name('name')[1]
- # Get value of an element
- browser.find_by_css('h1').first.value
- # Clicking links,return the first link
- browser.click_link_by_href('http://www.the_site.com/my_link')
- browser.click_link_by_partial_href('my_link')
- browser.click_link_by_text('my link')
- browser.click_link_by_partial_text('part of link text')
- browser.click_link_by_id('link_id')
- # element is visible or invisible
- browser.find_by_css('h1').first.visible
- # Verifying if element has a className
- browser.find_by_css('.content').first.has_class('content')
- # click button
- browser.find_by_name('send').first.click()
- browser.find_link_by_text('my link').first.click()
- # Mouse
- browser.find_by_tag('h1').mouse_over()
- browser.find_by_tag('h1').mouse_out()
- browser.find_by_tag('h1').click()
- browser.find_by_tag('h1').double_click()
- browser.find_by_tag('h1').right_click()
- # Mouse drag and drop
- draggable = browser.find_by_tag('h1')
- target = browser.find_by_css('.container')
- draggable.drag_and_drop(target)
- # Interacting with forms
- browser.fill('query', 'my name')
- browser.attach_file('file', '/path/to/file/somefile.jpg')
- browser.choose('some-radio', 'radio-value')
- browser.check('some-check')
- browser.uncheck('some-check')
- browser.select('uf', 'rj')
- # screenshot
- browser.driver.save_screenshot('your_screenshot.png')
- # 看不太懂
- # trigger JavaScript events, like KeyDown or KeyUp, you can use the type method.
- browser.type('type', 'typing text')
- '''
- If you pass the argument slowly=True to the type method you can interact with the page on every key pressed. Useful for
- '''
- # testing field's auto completion (the browser will wait until next iteration to type the subsequent key).
- for key in browser.type('type', 'typing slowly', slowly=True):
- pass # make some assertion here with the key object :)
- # You can also use type and fill methods in an element:
- browser.find_by_name('name').type('Steve Jobs', slowly=True)
- browser.find_by_css('.city').fill('San Francisco')
- # Dealing with HTTP status code and exceptions
- browser.visit('http://cobrateam.info')
- browser.status_code.is_success() # True
- browser.status_code == 200 # True
- browser.status_code.code # 200
- # try:
- # browser.visit('http://cobrateam.info/i-want-cookies')
- # except HttpResponseError, e:
- # print "Oops, I failed with the status code %s and reason %s" % (e.status_code, e.reason)
- # test
- # Cookies manipulation
- browser.cookies.add({'whatever': 'and ever'}) # add a cookie
- browser.cookies.all() # retrieve all cookies
- browser.cookies.delete('mwahahahaha') # deletes the cookie 'mwahahahaha'
- browser.cookies.delete('whatever', 'wherever') # deletes two cookies
- browser.cookies.delete() # deletes all cookies
- # Frames, alerts and prompts
- # Using iframes,You can use the get_iframe method and the with statement to interact with iframes. You can pass the
- # iframe's name, id, or index to get_ifram
- with browser.get_iframe('iframemodal') as iframe:
- iframe.do_stuff()
- # Chrome support for alerts and prompts is new in Splinter 0.4.Only webdrivers (Firefox and Chrome) has support for
- # alerts and prompts.
- alert = browser.get_alert()
- alert.text
- alert.accept()
- alert.dismiss()
- prompt = browser.get_alert()
- prompt.text
- prompt.fill_with('text')
- prompt.accept()
- prompt.dismiss()
- # use the with statement to interacte with both alerts and prompts
- with browser.get_alert() as alert:
- alert.do_stuff()
- # Executing javascript
- browser.execute_script("$('body').empty()")
- browser.evaluate_script("4+4") == 8
- # Matchers
- browser = splinter.Browser()
- browser.visit('https://splinter.readthedocs.io/')
- browser.is_text_present('splinter') # True
- browser.is_text_present('splinter', wait_time=10) # True, using wait_time
- browser.is_not_present('text not present') # True
- browser.is_element_present_by_css('h1')
- browser.is_element_present_by_xpath('//h1')
- browser.is_element_present_by_tag('h1')
- browser.is_element_present_by_name('name')
- browser.is_element_present_by_text('Hello World!')
- browser.is_element_not_present_by_id('firstheader')
- browser.is_element_not_present_by_value('query')
- browser.is_element_present_by_value('query', wait_time=10)
- if __name__ == '__main__':
- t1()
|