webdriver简单脚本分析:登录、等待、frame切换

1.一个登录大麦网站的简单脚本

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import  WebDriverWait
import  time
url = 'https://www.damai.cn/'
username = 'sssssssss'
password = 'sssssssssss'
def login():
    b = webdriver.Firefox()
    b.get(url)
    #WebDriverWait等待10s,直到查找到元素
    ele_log=WebDriverWait(b,10).until(lambda b:b.find_element_by_xpath('html/body/div[2]/div/div[3]/div[1]/div[1]/span'))
    ele_log.click()
    # b.implicitly_wait(10)  #设置webdriver等待时间
    #<iframe style="border: medium none;" scrolling="no" src="//ipassport.damai.cn/mini_login.htm?lang=zh_cn&amp;/
    # appName=damai&amp;appEntrance=default&amp;styleType=vertical&amp;bizParams=&amp;notLoadSsoView=true&amp;notKeepLogin=false&amp;/
    # isMobile=false&amp;showSnsLogin=false&amp;regUrl=%2F%2Fpassport.damai.cn%2Fregister&amp;plainReturnUrl=%2F%2Fpassport.damai.cn%2Flogin&amp;/
    # returnUrl=https%3A%2F%2Fpassport.damai.cn%2Fdologin.htm%3FredirectUrl%3Dhttps%25253A%25252F%25252Fwww.damai.cn%25252F%26platform%3D106002&amp;/
    # rnd=0.8137200034369335" id="alibaba-login-box" frameborder="none" height="342" width="350"></iframe>
    ifr = WebDriverWait(b, 10).until(lambda b: b.find_element_by_id('alibaba-login-box'))
    b.switch_to_frame('alibaba-login-box')  # 页面嵌套,需要找iframe的id,进行页面切换
    user=b.find_element_by_id('fm-login-id').send_keys(username)
    time.sleep(0.5)
    passwd=b.find_element_by_id('fm-login-password').send_keys(password)
    time.sleep(0.5)
    lo_bn = b.find_element_by_xpath('html/body/div[1]/div/div[2]/div/form/div[4]/button')
    lo_bn.click()
    b.quit()
if __name__=='__main__':
    login()

 

2.将脚本模块化

    代码可读性更强,便于维护

from selenium import webdriver
from selenium.webdriver.support.ui import  WebDriverWait
import  time

elenm={'url':'https://www.damai.cn/',
       'username' : 'xxxxxx',
       'password' : 'yyyyyy',
       'user_ele_id':'fm-login-id',
       'pwd_ele_id':'fm-login-password',
       'lo_xpath':'html/body/div[1]/div/div[2]/div/form/div[4]/button'}

def wait_time(driver,time,func):    #定义等待时间模块
    return WebDriverWait(driver,time).until(func)

def open_web():                     #第一个模块:打开浏览器
    webdriver_handle = webdriver.Firefox()
    return webdriver_handle

def open_url(driver,url):           ##第二个模块:打开网址,进入登录界面
    driver.get(url)
    driver.maximize_window()
    #WebDriverWait等待10s,直到查找到元素
    ele_log= wait_time(driver,10,lambda b:b.find_element_by_xpath('html/body/div[2]/div/div[3]/div[1]/div[1]/span'))
    ele_log.click()           #点击进入登录页面
    ifr = WebDriverWait(driver, 10).until(lambda b: b.find_element_by_id('alibaba-login-box'))
    driver.switch_to_frame('alibaba-login-box')  # 页面嵌套,需要找iframe的id,进行页面切换


def find_ele(driver,arg):       #第三个模块:获取元素
    ifr1 = WebDriverWait(driver, 10).until(lambda b: b.find_element_by_id(arg['user_ele_id']))
    user = driver.find_element_by_id(arg['user_ele_id'])
    passwd = driver.find_element_by_id(arg['pwd_ele_id'])
    lo_bn =driver.find_element_by_xpath(arg['lo_xpath'])
    return user,passwd,lo_bn

def  sendkey(ele_tuple,arg):    #第四个模块:数据发送
      listkey=['username','password']
      i=0
      for key in listkey:
          ele_tuple[i].send_keys('')
          ele_tuple[i].clear()
          ele_tuple[i].send_keys(arg[key])
          time.sleep(0.5)
          i+=1
      ele_tuple[2].click()

def login():     #主登录模块
    b = open_web()                      #第一个模块:打开浏览器
    open_url(b, elenm['url'])           #第二个模块:打开网址
    ele_tuple=find_ele(b,elenm)         #第三个模块:获取登录需要的元素
    sendkey(ele_tuple,elenm)            #第四个模块:数据发送

if __name__=='__main__':
    login()

 

转载于:https://www.cnblogs.com/lijinping716/p/11549397.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值