Selenium

#!/usr/bin/env python
# -*- coding: utf-8 -*-

__author__ = 'Fade Zhao'

from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
url = "http://www.baidu.com"
browser = webdriver.Chrome()
# get的方式访问url
browser.get(url)
# 获取搜索框
element = browser.find_element_by_id('kw')
# 清空搜索框
element.clear()
# 在搜索框中输入信息
element.send_keys('剑来', Keys.ARROW_DOWN)
# 开启搜索
element.send_keys(Keys.RETURN)
time.sleep(1)
# 获取第一个网页链接
ele_one = browser.find_element_by_xpath('//*[@id="1"]/h3/a')
# 点击第一个页面
ele_one.click()
#
# 通过JS代码来实现将页面下拉
browser.execute_script('''
            window.scrollTo(0,document.body.scrollHeight);
                        ''')
time.sleep(1)
# 关闭之前的browser
browser.close()

# 拖拽
# 。略过



'''窗口和页面frame切换'''
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
browser = webdriver.Chrome()

for handle in browser.window_handles:
    # 切换窗口
    browser.switch_to_window(handle)

url = 'http://www.w3school.com.cn/tiy/t.asp?f=html_select'
browser.get(url)
# 切换frame
browser.switch_to.frame(1)
# select下拉框
select = Select(browser.find_element(By.XPATH,'//select'))
# 根据索引、value值、文本值进行选择
select.select_by_index(1)
time.sleep(0.5)
select.select_by_value('opel')
time.sleep(0.5)
select.select_by_visible_text('Audi')

# 如果select中的multiple="multiple",也就是说这个select支持多选
# 取消所有选项
select.deselect_all()
# 获取所有选项
select.options()
# 获取已选中
select.all_selected_options()
select.select_by_index(1)

# 从frame中切换出来
browser.switch_to.default_content()
browser.quit()
# 更多frame:http://blog.csdn.net/huilan_same/article/details/52200586

'''弹窗处理'''
url ='http://www.w3school.com.cn/tiy/t.asp?f=hdom_alert'
browser.get(url)
browser.switch_to.frame('i')
# 点击弹出alert的button
browser.find_element(By.XPATH,'//input[1]').click()
time.sleep(1)
# 切换到alert
alert = browser.switch_to.alert()
alert.accept()
# 更多alert:http://blog.csdn.net/huilan_same/article/details/52298460
browser.quit()

'''Cookie'''
driver = webdriver.Chrome()
driver.get("http://www.youdao.com")

# 获得cookie信息
cookie = driver.get_cookies()

#将获得cookie的信息打印
print(cookie)
# 添加cookie
driver.add_cookie({'name':'key-aaaaaaa', 'value':'value-bbbb'})
# 删除cookies
driver.delete_all_cookies()
# 删除特定cookie
driver.delete_cookie("CookieName")

'''等待'''
    # 由于现在很多网站都采用的是Ajax加载技术,不确定网页元素什么时候能被完全加载,所以网页元素的选取会比较困难,这时候就需要等待了
# Selenium提供了两种等待方式:"显式"等待 、"隐式"等待
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Firefox()
driver.implicitly_wait(10)  # 隐性等待和显性等待可以同时用,但要注意:等待的最长时间取两者之中的大者
driver.get('https://huilansame.github.io')
locator = (By.LINK_TEXT, 'CSDN')

try:
    WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))
    print(driver.find_element_by_link_text('CSDN').get_attribute('href'))
finally:
    driver.close()


# 隐式等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,我仍得等到页面全部完成才能执行下一步,我想等我要的元素出来之后就下一步怎么办?有办法,这就要看selenium提供的另一种等待方式——显性等待wait了。
from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(30)  # 隐性等待,最长等30秒
driver.get('https://huilansame.github.io')

print(driver.current_url)
driver.quit()

 

posted @ 2017-12-11 01:07  LeeeetMe  阅读(137)  评论(0编辑  收藏  举报