python面试题库知乎_【知乎知乎Python面试题】面试问题:python学… - 看准网

基本操作

from selenium import webdriver

#————————打开网页

b = webdriver.Chrome()#打开浏览器

b.get('https://www.baidu.com')

title = b.title #获得网页title

print(title)

www = b.current_url #返回打开的网址

print(www)

#————————定位元素

ele = b.find_element_by_id('kw') #根据id定位元素

ele = b.find_element_by_name('wd') #根据name定位元素

ele1 = b.find_element_by_class_name('')#根据class属性定位元素

ele2 = b.find_element_by_tag_name('input') #根据标签名定位元素

ele3 = b.find_element_by_link_text('帐号密码登录') #根据text定位元素

ele4 = b.find_element_by_partial_link_text('账号')#模糊text定位元素

ele5 = b.find_element_by_css_selector('')#根据css定位元素

#———————常用操作

ele.clear() #清空

ele.send_keys('李小龙') #模拟键盘输入

ele.back()#返回上一级

ele1.send_keys('刘德华')#模拟键盘输入

b.maximize_window()#最大化窗口

b.close() # 关闭当前窗口

b.quit() #关闭浏览器

#———————如果需要定位的元素在frame内,需要先进入frame

b.switch_to_frame('ptlogin_iframe')#先定位到frame里面

#———————遇到新标签窗口

now_handle = b.current_window_handle #先拿到原来窗口的句柄

print(now_handle)

all_handles = b.window_handles #拿到全部窗口的句柄

for handle in all_handles: #比对句柄

print(handle)

if handle != now_handle:

b.switch_to_window(handle) #跳转到新窗口

b.close() #关闭当前窗口

b.quit()#关闭浏览器

Selenuim+Python之元素定位总结及实例说明

点击打开链接

Python+Selenium定位不到元素常见原因及解决办法

点击打开链接

测试过程中,遇到原页面打开了新的页面的问题,用获取窗口句柄的方法来解决:

now_handle = driver.current_window_handle #得到当前窗口句柄

driver.find_element_by_id("baidu").click()

all_handles = driver.window_handles #获取所有窗口句柄

for handle in all_handles:

if handle != now_handle:

driver.switch_to_window(handle)

driver.find_element_by_id("kw").send_keys('python')

driver.find_element_by_id("su").click()

self.driver.implicitly_wait(30)

driver.switch_to_window(now_handle) #返回window.html

怎么等待页面元素加载完成——等待的方法

1 / 强制等待

用time.sleep()来强制等待多长时间

2 / 隐性等待

implicitly_wait(xx)

格式:

driver.implicitly_wait(30)#

隐性等待,最长等30秒

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

3 / 显性等待

WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。

它主要的意思就是:程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。

格式:

先导入模块:

from selenium.webdriver.support.ui import WebDriverWait

WebDriverWait(driver,

超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)

某论坛自动签到小练习:

#某论坛的自动签到小练习

from selenium import webdriver

import time

driver = webdriver.Chrome()

driver.get('http://www.sketchupbar.com/forum.php')

assert 'SketchUp'in driver.title

ele = driver.find_element_by_class_name('vm')

print(ele)

ele.click()

#由于发现正常的账号登陆,需要用滑条解锁认证,转而考虑用qq关联账号登陆。避过滑条。

driver.implicitly_wait(2) #隐性等待,最长2秒

driver.switch_to_frame('ptlogin_iframe')#先定位到frame里面

ele = driver.find_element_by_id('switcher_plogin') #定位到frame里面之后再定位具体元素

print(ele)

ele.click()

username = driver.find_element_by_id('u') #定位账号

username.send_keys('xxxxxxxxx') #输入账号

password = driver.find_element_by_id('p') #定位密码

password.send_keys('xxxxxxxxx') #输入密码

password.click()

enter = driver.find_element_by_id('login_button') #定位点击授权登陆

enter.click()

driver.implicitly_wait(10)#隐性等待,最长10秒

font = driver.find_element_by_class_name('font') #定位签到关键字

now_handle = driver.current_window_handle #获取当前窗口句柄

print(now_handle)

font.click()

all_handles = driver.window_handles #获取全部窗口句柄

for handle in all_handles:

print(handle)

if handle != now_handle:

driver.switch_to_window(handle) #跳转到新标签窗口

try:

jd = driver.find_element_by_id('JD_sign') #在新标签窗口进行签到操作

jd.click()

print('签到成功!!!')

driver.quit() # 关闭浏览器

except:

print('已经签到过啦!!!!')

driver.quit() # 关闭浏览器

xpath

模拟鼠标和输入事件

ActionChains 类,用于生成模拟用户行为

1 / 导入

from selenium.webdriver.common.action_chains import ActionChains2 / 生成模拟用户行为对象

from selenium import webdriver

from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()

driver.get('http://www.maiziedu.com/')

ActionChains(driver) #生成模拟用户行为对象。driver就是生成的浏览器句柄3 / perform() 执行存储的行为

from selenium import webdriver

from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()

driver.get('http://www.maiziedu.com/')

ele = driver.find_element_by_link_text('企业直通车')

ActionChains(driver).move_to_element(ele).perform() #生成模拟用户行为对象并移动到元素上。driver就是生成的浏览器句柄

sub_ele = driver.find_element_by_link_text('软件测试') #再在这个弹出页面中定位元素

处理Alter对象

比较详细用法的一篇文章:

点击打开链接

__________________________________________________________________________________________________

PhantomJs

讲解PhantomJs配置比较详细的一个博客点击打开链接

PhantomJs文档说明点击打开链接

官方文档 点击打开链接

配置headers 和proxy 点击打开链接

扩展阅读 点击打开链接

selenium支持的各种driver 点击打开链接

phantomjs设置请求头 点击打开链接

phantomjs设置请求头的小代码:

from selenium import webdriver

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

from selenium.webdriver.common.proxy import ProxyType

from headers import get_headers

dcap = dict(DesiredCapabilities.PHANTOMJS)

# #设置请求头

#dcap["phantomjs.page.settings.userAgent"]=("Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3")

dcap["phantomjs.page.settings.userAgent"] = (get_headers().get('User_Agent')) #随机获取请求头

#不载入图片

dcap["phantomjs.page.settings.loadImages"] = False

#设置代理

#打开带配置的浏览器

driver = webdriver.PhantomJS(desired_capabilities=dcap)

#driver.get('http://1212.ip138.com/ic.asp')

#driver.get('https://httpbin.org/get?show_env=1')

driver.get('http://www.myip.cn/judge.php')

# driver.get_screenshot_as_file('01.png')

print(driver.page_source)

driver.quit()

phantomjs超时设置:

# 设置10秒页面超时返回,类似于requests.get()的timeout选项,driver.get()没有timeout选项

# 以前遇到过driver.get(url)一直不返回,但也不报错的问题,这时程序会卡住,设置超时选项能解决这个问题。

driver.set_page_load_timeout(20)

# 设置10秒脚本超时时间

driver.set_script_timeout(20)

phantomjs设置代理

点击打开链接

知乎上的这篇文章比较细,记录下来

作者:客从何处来

链接:https://www.zhihu.com/question/29207713/answer/124956873

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值