zoukankan      html  css  js  c++  java
  • Python Selenium

    首先到pypi上下载selenium,不同版本的selenium对chrome/chormium的版本要求也不同。解压然后将路径添加到PATH。
    API看了半天没看懂,所以还是到网上直接找了例子进行学习。

    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys
    import unittest
    import time
    
    
    #html = browser.find_element_by_xpath("//*").get_attribute("outerHTML")
    #不要用browser.page_source,那样得到的页面源码不标准
    
    
    class YahooTestCase(unittest.TestCase):
        """
        Selenium WebDriver is often used as a basis for testing web applications.
        Here is a simple example uisng Python’s standard unittest library
        """
        def setUp(self):
            self.browser = webdriver.Firefox()
            self.addCleanup(self.browser.quit)
    
        def testPageTitle(self):
            self.browser.get("http://www.yahoo.com")
            self.assertIn("Yahoo", self.browser.title)
    
    
    def searchInYahoo(url):
        browser.get(url)
        assert "Yahoo" in browser.title
        #elem = browser.find_element_by_name("p") #[OK]Find the search box
        elem = browser.find_element_by_xpath("//*[@id='uh-search-box']") #[OK]Find the search box
        elem.send_keys("lxw0109" + Keys.RETURN)
        time.sleep(3)
    
    
    def csdnDemo():
        browser.get("http://www.yahoo.com") # Load page
        assert "Yahoo" in browser.title
        elem = browser.find_element_by_name("p") # Find the query box
        elem.send_keys("seleniumhq" + Keys.RETURN)
        time.sleep(0.2) # Let the page load, will be added to the API
        try:
            newUrl = browser.find_element_by_xpath("//a[contains(@href,'http://www.seleniumhq.org')]")
            ActionChains(browser).click(newUrl).perform() #鼠标左键 ".perform()" is essential. 
            #print newUrl #<selenium.webdriver.remote.webelement.WebElement (session="e4d91ee08e7bcc7e89844a0464051f53", element="0.6900426994876563-1")>
        except NoSuchElementException:
            assert 0, "can't find seleniumhq"
        time.sleep(3)
        browser.close()
    
    
    def basicOperations(url):
        """
        browser.maximize_window()
        browser.set_window_size()
        browser.find_element_by_xpath()/browser.find_element_by_id()/browser.find_element_by_name()/...
        browser.back()
        browser.forward()
        browser.title
    
        get_attribute("type")
        send_keys()
        click()
        clear()
        text
        size
        """
        browser.get(url)
        assert u"百度" in browser.title #u"搜狗"
    
        text = browser.find_element_by_xpath('//*[@id="cp"]').text  #'//*[@id="query"]'
        print "copyright text:", text
    
        searchBar = browser.find_element_by_xpath('//*[@id="kw"]')
        searchBar.send_keys(u"lxw0109")
        #打印搜索框的大小
        print "searchBar.size:", searchBar.size #searchBar.size: {'width': 494, 'height': 22}
        print "searchBar.get_attribute("type"):", searchBar.get_attribute("type")     #searchBar.get_attribute("type"): text
    
        browser.find_element_by_xpath('//*[@id="su"]').click()
        time.sleep(3)
    
        browser.set_window_size(800, 600)
        browser.get("http://www.cnblogs.com/lxw0109")
        time.sleep(3)
    
        browser.maximize_window()
        browser.back()
        time.sleep(3)
        browser.forward()
    
        browser.get("http://www.renren.com")
        email = browser.find_element_by_xpath('//*[@id="email"]')
        email.send_keys("531958897@qq.comm")
        time.sleep(1)
        email.send_keys(Keys.BACK_SPACE)
        browser.find_element_by_xpath('//*[@id="password"]').send_keys("liuxiaoweii")
        time.sleep(1)
        browser.find_element_by_xpath('//*[@id="password"]').send_keys(Keys.BACK_SPACE)
        browser.find_element_by_xpath('//*[@id="password"]').clear()
        browser.find_element_by_xpath('//*[@id="password"]').send_keys("liuxiaowei")
        time.sleep(1)
    
        email.send_keys(Keys.CONTROL, "a")
        time.sleep(1)
        email.send_keys(Keys.CONTROL, "x")
        time.sleep(1)
        email.send_keys(Keys.CONTROL, "v")
    
        #browser.find_element_by_xpath('//*[@id="login"]').click()  #OK
        browser.find_element_by_xpath('//*[@id="login"]').send_keys(Keys.ENTER)
        time.sleep(3)
        article = browser.find_element_by_link_text(u"人人综艺")
        #ActionChains(browser).move_to_element(article).perform()   #not working
        #ActionChains(browser).context_click(article).perform() #鼠标右键
        ActionChains(browser).click(article).perform() #鼠标左键 ".perform()" is essential.
    
    
    if __name__ == '__main__':
        """
        #0. unittest demo:
        #unittest.main(verbosity=2)
        """
    
        browser = webdriver.Chrome()    #Get local session of chrome
        #print type(browser) #<class 'selenium.webdriver.chrome.webdriver.WebDriver'>
        browser.maximize_window() #浏览器窗口最大化
    
        """
        #1. search in Yahoo automatically
        searchInYahoo("http://www.yahoo.com")
        browser.quit()
        """
    
        """
        #2. http://blog.csdn.net/carolzhang8406/article/details/6925588
        csdnDemo()
        """
    
        #3. https://my.oschina.net/yangyanxing/blog/280871?p=1
        basicOperations("https://www.baidu.com/")   #NOTE: "https://" is essential.
        """
        """

    TODO:

    selenium学习(一):cookie的获取、登录、获取元素
    通过程序自己在新浪微博上发微博

    References:
    1. selenium 3.0.2-PyPI
    2. selenium api docs
    3. python操作selenium的基本操作
    4. python中使用selenium
    5. selenium-webdriver(python)--鼠标事件(双击,右键) 这篇文章中有单击的API

  • 相关阅读:
    Python 操作 MySQL 之 pysql 与 SQLAchemy
    Python 列表元素里面含有字典或者列表进行排序
    Windows PyCharm QtDesigner/pyuic5配置
    Python之科学运算Pandas模块
    Linux 主要目录速查表
    php读取文件大小
    上传视频云点播和查看视频
    wordppt转pdf
    微信登录
    微信公众号
  • 原文地址:https://www.cnblogs.com/lxw0109/p/python_selenium.html
Copyright © 2011-2022 走看看