2020-12-31

Selenium

from selenium import webdriver

实例化浏览器
driver = webdriver.Chrome()

发送请求
driver.get(‘https://www.baidu.com’)

退出浏览器
driver.quit()
使用clear方法可以清除输入框中的内容
inputTag.clear()
select元素不能直接点击。因为点击后还需要选中元素。这时候selenium就专门为select标签提供了一个类from selenium.webdriver.support.ui import Select。将获取到的元素当成参数传到这个类中,创建这个对象。以后就可以使用这个对象进行选择了。
• 操作按钮
操作按钮有很多种方式。比如单击、右击、双击等。这里讲一个最常用的。就是点击。直接调用click函数就可以了
inputTag = driver.find_element_by_id(‘su’)
inputTag.click()

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
import time
driver = webdriver.Chrome()
# 打开实例网站
driver.get('https://www.17sucai.com/pins/demo-show?id=5926')
time.sleep(2)
# 切换iframe
driver.switch_to_frame(driver.find_element_by_id('iframe'))

#**********************操作select元素***************************
# 定位select标签
# selectTag = driver.find_element_by_class_name('nojs')
selectTag = Select(driver.find_element_by_class_name('nojs'))
# 操作select标签的方式
# 1. 根据值来选择
selectTag.select_by_value('JP')
# 2. 通过下标索引值来选择
selectTag.select_by_index(1)
#********************操作非select标签*************************
divTag = driver.find_element_by_id('dk_container_country-nofake')
divTag.click()

time.sleep(1)
driver.find_element_by_xpath('//*[@id="dk_container_country-nofake"]/div/ul/li[2]/a').click()

#模拟登录

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
import time
driver = webdriver.Chrome()
# 打开实例网站
driver.get('https://www.xxx.com/')
time.sleep(2)

# 切换iframe
login_frame = driver.find_element_by_xpath('//*[@id="anony-reg-new"]/div/div[1]/iframe')
driver.switch_to.frame(login_frame)

# 切换登录方式
driver.find_element_by_class_name('account-tab-account').click()
time.sleep(2)

# 输入账号和密码
driver.find_element_by_id('username').send_keys('XXXXXXX')
time.sleep(1)
driver.find_element_by_id('password').send_keys('123abc543')

time.sleep(1)
# 点击登录
# 如果定位的元素出现空格
# 我们可以通过xpath进行定位
# 如果有其他的元素例如 id name... 通过其他的方式来进行定位
# 我们可以尝试的取选择元素中的一部分
driver.find_element_by_class_name('btn-account').click()

行为链
有时候在页面中的操作可能要有很多步,那么这时候可以使用鼠标行为链类ActionChains来完成。比如现在要将鼠标移动到某个元素上并执行点击事件

from selenium import webdriver
import time
from selenium.webdriver import ActionChains

driver = webdriver.Chrome()
driver.get('https://www.xx.com')
#定位到输入框
inputtag = driver.find_element_by_id('kw')
#定位到按钮
buttontag = driver.find_element_by_id('su')
#实例化
actions = ActionChains(driver)
#把鼠标移动到输入框里
actions.move_to_element(inputtag)
#输入内容
actions.send_keys_to_element(inputtag,'家和万事兴')
#点击按钮
time.sleep(1)
actions.move_to_element(buttontag)
actions.click()
time.sleep(1)
#右键单击
actions.context_click()
#提交行为链上的操作
actions.perform()

模拟登陆

# 模拟登录xx空间

# https://xui.ptlogin2.xx.com/cgi-bin/xlogin?......................pt_no_auth=0

# https://user.xzone.xx.com/xxxxxxxxx 空间的地址
# 第一种 像Url发起post请求携带账号密码进行登录
# 第二种 拿到cookie值进行模拟登录


driver.get('https://xui.ptlogin2.xx.com/cgi-bin/xlogin?............)

button = driver.find_element_by_class_name('face')
button.click()
time.sleep(3)
# driver.current_url
# driver.page_source

# 获取cookie
listCookies = driver.get_cookies()
# print(type(listCookies))
# print('='*100)

# jsonCookies = json.dumps(listCookies)
# print(type(jsonCookies))
# 保存cookie
# with open('qqzone.json','w') as file_obj:
#     file_obj.write(jsonCookies)

# 我们获取到的cookie能不能用? ;
cookie = [item['name'] + '=' + item['value']for item in listCookies]

cookie_str = '; '.join(item for item in cookie)
# print(cookie_str)

url = 'https://user.qzone.qq.com/192149641'

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 。。。。。。',
    'cookie':cookie_str
}

html = requests.get(url,headers=headers)

with open('qzong.html','w',encoding='utf-8') as f:
    f.write(html.text)

** 隐式等待:**调用driver.implicitly_wait。那么在获取不可用的元素之前,会先等待10秒中的时间
driver.implicitly_wait(10)

显示等待:显示等待是表明某个条件成立后才执行获取元素的操作。也可以在等待的时候指定一个最大的时间,如果超过这个时间那么就抛出一个异常。显示等待应该使用selenium.webdriver.support.excepted_conditions期望的条件和selenium.webdriver.support.ui.WebDriverWait来配合完成

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")

element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
 )

一些其他的等待条件
• presence_of_element_located:某个元素已经加载完毕了。
• presence_of_all_elements_located:网页中所有满足条件的元素都加载完毕了。
• element_to_be_clickable:某个元素是可以点击了。
更多条件请参考:http://selenium-python.readthedocs.io/waits.html
打开多窗口和切换页面
• 有时候窗口中有很多子tab页面。这时候肯定是需要进行切换的。selenium提供了一个叫做switch_to_window来进行切换,具体切换到哪个页面,可以从driver.window_handles中找到

# 打开一个新的页面
driver.execute_script("window.open('url')")

print(driver.current_url)

# 切换到这个新的页面中
driver.switch_to_window(self.driver.window_handles[1])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值