侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

关于Python 常用获取元素 Driver 总结

Python  /  管理员 发布于 7年前   304

1、在 Windows 设置临时环境变量 cmd命令窗口 输入 path=%path%;E:\soft\python-3.5.2-embed-win32

永久配置,在系统变量下找到path,在Path的最后面添加Python的安装目录

D:\Python34,同样在PATHEXT中添加 .PY;.PYM

然后,输入python 出现版本信息就成功了。

2、CMD命令窗口,清屏的方法

 import os os.system('cls')

如果不要返回值0就是:

 import os i=os.system('cls')

3、查看当前系统时间

import time #-*-格式时间格式-*-localtime = time.asctime( time.localtime(time.time()) ) #-*-格式时间格式[格式化成2009-03-20 11:45:39形式]-*-time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #-*-格式时间格式[时间戳格式]-*-time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()) #-*-输出格式化后的时间-*-print ("本地时间为 :", localtime)

4、在CMD命令行中,输入 “python” + “空格”,即 ”python “;将已经写好的脚本文件拖拽到当前光标位置,然后敲回车运行即可

5、乱码原因:

因为你的文件声明为utf-8,并且也应该是用utf-8的编码保存的源文件。但是windows的本地默认编码是cp936,也就是gbk编码,所以在控制台

直接打印utf-8的字符串当然是乱码了。

解决方法:

在控制台打印的地方用一个转码就ok了,打印的时候这么写:

 print myname.decode('UTF-8').encode('GBK') 

比较通用的方法应该是:

 import sys type = sys.getfilesystemencoding() print myname.decode('UTF-8').encode(type)   #-*-coding:UTF-8-*- 或者 import sys reload(sys) sys.setdefaultencoding('UTF-8')

6、其实要驱动chrome浏览器必须要依赖Chromedriver文件才行,

下载地址:http://code.google.com/p/chromedriver/downloads/list

找到适合你自己系统的包之后下载解压出Chromedriver文件,并将此文件拷贝到java项目的根目录。还是拿上此教程的为例,我们直接爸chromedriver文件拷贝到HelloSelenium项目的根目录下也就是HelloSelenium目录下。这样就可以直接运行了。

7、 安装pyse : 将其克隆到本地,将pyse目录放到..\Python27\Lib\site-packages\目录下。

https://github.com/defnngj/pyse

python setup.py install 安装

java -jar selenium-server-standalone-3.4.0.jar -multiWindow

8、定位属性

#########百度输入框的定位方式##########  #通过id方式定位 browser.find_element_by_id("kw").send_keys("selenium")  #通过name方式定位 browser.find_element_by_name("wd").send_keys("selenium")  #通过tag name方式定位 browser.find_element_by_tag_name("input").send_keys("selenium")  #通过class name 方式定位 browser.find_element_by_class_name("s_ipt").send_keys("selenium")  #通过CSS方式定位 browser.find_element_by_css_selector("#kw").send_keys("selenium")  #通过xphan方式定位 browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")  ############################################  browser.find_element_by_id("su").click() time.sleep(3) browser.quit()

一、元素的定位

1.webdriver提供的8种页面元素定位方法:

id/name/class name/tag name/link text/partial link text/xpath/css selector

其中python对应的8种方法:

 find_element_by_id()      如: find_element_by_id("kw")  find_element_by_name()      如: find_element_by_name("wd") find_element_by_class_name()    如: find_element_by_class_name("s_ipt")  find_element_by_tag_name()     如: find_element_by_tag_name("input")  find_element_by_link_text()    如:find_element_by_link_text(u"新闻")  find_element_by_partial_link_text()  如:find_element_by_partial_link_text(u"一个很长的")  find_element_by_xpath()     如: find_element_by_xpath(" .//*[@id='kw']")  find_element_by_css_selector()    如: find_element_by_css_selector("#kw")

二、浏览器控制

1.控制浏览器大小:

set_window_size() 例如:driver.set_window_size(400,500)

maximize_window() 例如:driver.maximize_window() #无参数

2.浏览器后退、前进:back()-后退、farward()-前进

三、鼠标事件

ActionChains类提供的常用方法:

1.1 perform():执行ActionChains中存储的所有行为,对整个事件进行提交

1.2 context_click(): 右击

如:

   from selenium.webdriver.common.action_chains import ActionChains    ...   ActionChains(dr).context_click(docfile).perform()

1.3 double_click(): 双击

如:

   from selenium.webdriver.common.action_chains import ActionChains    ...   doubleClick=dr.find_element_by_id("xxx")   ActionChains(dr). double_Click(doubleClick).perform()  

1.4 drag_and_drop(source,target): 拖动

如:

   from selenium.webdriver.common.action_chains import ActionChains    ...   dsource=dr.find_element_by_id("xxx")  #拖动的源元素   dtarget=dr.find_element_by_id("xxx")  #释放的目标目标元素   ActionChains(dr).drag_and_drop(dsource,dtarget).perform()  

1.5 move_to_element(): 鼠标悬停

如:

   from selenium.webdriver.common.action_chains import ActionChains    ...   above=dr.find_element_by_id("xxx")   ActionChains(dr).move_to_element(above).perform()

四、键盘事件

1.首先要导入键盘事件的包

from selenium.webdriver.common.keys importKeys ... dr.get("http://www.baidu.com") #输入内容 dr.find_element_by_id("kw").send_keys("seleniumm") #删除输入内容的最后一个字母, dr.find_element_by_id("kw").send_keys(Keys.BACK_SPACE) #输入:空格+教程 dr.find_element_by_id("kw").send_keys(Keys.SPACE) dr.find_element_by_id("kw").send_keys(u"教程") #ctrl+a全选输入框内容 dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'a') #ctrl+x剪贴输入框内容 dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'x') #ctrl+v剪贴输入框内容 dr.find_element_by_id("kw").send_keys(Keys.CONTROL,'v') #回车键操作 dr.find_element_by_id("su").send_keys(Keys.ENTER) dr.close() 

常用的键盘操作整理:

 send_keys(Keys.BACK_SPACE) #删除键BackSpace send_keys(Keys.SPACE)  #空格键Space send_keys(Keys.TAB)   #制表键Tab send_keys(Keys.ESCAPE)  #回退键Esc send_keys(Keys.ENTER)  #回车键Enter send_keys(Keys.CONTROL,'a') #Ctrl+a send_keys(Keys.CONTROL,'c') #Ctrl+c  send_keys(Keys.CONTROL,'x') #Ctrl+x send_keys(Keys.CONTROL,'v') #Ctrl+x send_keys(Keys.F1)   #F1,类似的有F1-F12

五、获取验证

六、设置等待

1.显示等待:等待某个条件成立时,继续执行,否则达到最大等待时间后抛出异常:TimeoutException,显示等待是针对当前要定位元素使用

WebDriverWait(driver, timeout,poll_frequency,ignored_exceptions=None).until(method,message) 

示例:

 WebDriverWait(dr,5,0.5,None).until(  expected_conditions.presence_of_element_located((By.ID,"kw1")),message='test') 

解释:

A.WebDriverWait():在设置时间内,默认间隔一段时间检测一次当前页面元素是否存在,若超过当前指定时间检测不到则抛出异常; B.driver:webdriver的浏览器驱动,ie、firefox、chromea C.timeout:最长超时时间,以秒为单位 D.poll_frequency:休眠间隔时间-步长,默认0.5秒 E.ignored_exceptions:超时后异常信息,默认抛出NoSuchElementException异常 F.until(method,message): 调用该方法提供的驱动作为一个参数,直到返回值为True G.until_not(method,message):调用该方法提供的驱动作为一个参数,直到返回值为False H.expected_conditions类提供的预期条件实现有:  title_is:判断标题是否是xx  title_contains:判断标题是否包含xx  presence_of_element_located:元素是否存在   visibility_of_element_located:元素是否存在   visibility_of:是否可见   presence_of_all_elements_located:判断一组元素是否存在   text_to_be_present_in_element:判断元素是否有xx文本信息    text_to_be_present_in_element_value:判断元素值是否有xx文本信息    frame_to_be_available_and_switch_to_it:表单是否可见,并切换到该表单   invisibility_of_element_located:判断元素是否隐藏  element_to_be_clickable:判断元素是否点击,它处于可见和启动状态  staleness_of:等到一个元素不再依附于DOM  element_to_be_selected:被选中的元素  element_located_to_be_selected:一个期望的元素位于被选中  element_selection_state_to_be:一个期望检查如果给定元素被选中  element_located_selection_state_to_be:期望找到一个元素并检查是否是选择状态  alert_is_present:预期一个警告信息 

2.隐式等待:通过一定的时长等待页面所有元素加载完成,哪个元素超出设置时长没被加载就抛出异常NoSuchElementException,隐式等待是针对所有元素的

implicitly_wait(5) #默认单位为秒

示例:

dr.implicitly_wait(5)

七、sleep休眠 python中强制的程序等待

 from time import sleep sleep(4) #默认单位秒,设置小于1秒的时间可以用小数点如sleep(0.6)

八、定位一组元素,类似与1中定位单个元素方法

 find_elements_by_id()      如: find_elements_by_id("kw")  find_elements_by_name()     如: find_elements_by_name("wd") find_elements_by_class_name()    如: find_elements_by_class_name("s_ipt")  find_elements_by_tag_name()    如: find_elements_by_tag_name("input")  find_elements_by_link_text()    如:find_elements_by_link_text(u"新闻")  find_elements_by_partial_link_text()  如:find_elements_by_partial_link_text(u"一个很长的")  find_elements_by_xpath()     如: find_elements_by_xpath(" .//*[@id='kw']")  find_elements_by_css_selector()   如: find_elements_by_css_selector("#kw")

使用场景:

a.批量操作对象,如选中页面上所有复选框

b.先获取一组对象,再在这组对象里定位需要的的一些对象,如定位所有复选框,然后选择最后一个

例如:代码如下

checkbox.htm页面:

 <styletype="text/css"> body{font-size:12px; font-family:Tahoma;} .checkbox{vertical-align:middle; margin-top:0;} </style> <body> <inputclass="checkbox"type="checkbox"/>元旦 <inputtype="checkbox"name="test"/>圣诞节 <inputtype="checkbox"name="test"/>股市 <inputtype="checkbox"name="test"/>阿凡达 <inputtype="checkbox"name="test"/>十月围城 <inputtype="checkbox"name="test"/>水价上调 <inputtype="button"value="检测"id="btn"/> </body>

python代码:

from selenium import webdriver    dr=webdriver.Firefox()  dr.get("D:\\workspace\\pySelenium\\resources\\checkbox.htm") #使用tagname方式选择页面上所有tagname为input的元素 select_tagname=dr.find_elements_by_tag_name("input") #使用xpath方式选择页面上所有tagname为input的元素 select_xpath=dr.find_elements_by_xpath("//input[@type='checkbox']") #使用css_select方式选择页面上所有tagname为input的元素 select_css=dr.find_elements_by_css_selector('input[type=checkbox]') for i in select_tagname: #循环对每个input元素进行点击选中操作 if i.get_attribute("type")=='checkbox': i.click() for j in select_xpath: #循环对每个input元素进行点击取消操作 j.click() for k in select_css: #循环对每个input元素进行点击选中操作 k.click() #打印出checkbox的个数 print'----页面上checkbox的个数为:',len(select_css) #使用pop()获取1组元素的第几个元素 select_css.pop(0).click()#第一个 select_css.pop(1).click()#第二个 select_css.pop().click()#最后一个 select_css.pop(-1).click()#最后一个 select_css.pop(-2).click()#倒数第二个 dr.close()

备注:pop():选择一组元素中的某一个,要注意的是:pop()和pop(-1)都表示最后一个元素

九、多表单切换(对于有frame嵌套表单的操作)

frame页面:

<html><body><frameset><h3>frame</h3><iframeid='frameid'name='frameName'width="800"height="500"src="http://www.baidu.com"/></frameset></body></html>

python代码:

 dr.get("D:\\workspace\\pySelenium\\resources\\frame.htm") dr.switch_to_frame("frameid")#通过frame的id进入iframe #dr.switch_to_frame("frameName") #通过frame的name进入iframe #下面可以对frame进行操作了 dr.find_element_by_id("kw").send_keys("selenium") dr.find_element_by_id("su").click() dr.switch_to_default_content()#退出当前frame返回上一层

备注:

1.switch_to_frame()默认直接取表单的id或者name属性来切换

2.完成当前frame表单操作后,可以通过switch_to_default_content()方法返回上一层表单,即离的最近的switch_to_frame()方法

3.对于frame中没有id和name属性的通过下面方式进入frame(定位到frame以页面对象传入)

python代码:

 dr.get("D:\\workspace\\pySelenium\\resources\\frame.htm")  #定位到frame页面元素  framepath=dr.find_element_by_class_name("frameClassname")  dr.switch_to_frame(framepath)#通过frame页面对象进入iframe #下面可以对frame进行操作了 dr.find_element_by_id("kw").send_keys("selenium") dr.find_element_by_id("su").click() dr.switch_to_default_content()#退出当前frame返回上一层

十、多窗口切换

selenium-webdriver中使用switch_to_window()方法来切换任意窗口,常用方法有

driver.current_window_handle #获取当前窗口句柄  driver.window_handles #返回所有窗口句柄到当前会话  driver.switch_to_window() #进入窗口,用于切换不同窗口

python代码:

dr.get("http://www.baidu.com") current_handle=dr.current_window_handle #获取百度首页窗口句柄 index_login=dr.find_element_by_xpath("//div[@id='u1']/a[@class='lb']")#获取登录按钮对象 index_login.click()#点击登录 dr.implicitly_wait(5) dr.find_element_by_class_name("pass-reglink").click()#点击立即注册按钮 all_handles=dr.window_handles #获取所有打开窗口句柄 for handle in all_handles: if handle==current_handle: dr.switch_to_window(handle) ''' ...对首页窗口进行操作 ''' print'----首页页面title:',dr.title for handle in all_handles: if handle!=current_handle: dr.switch_to_window(handle) ''' ...对注册窗口进行操作 ''' print'----注册页面title:',dr.title

十一、警告框处理

webdriver中处理js生成的alert、confirm、prompt处理方法是:使用switch_to_alert()定位到alert/confirm/prompt,然后使用text、accept、dismiss、send_keys来根据需要操作。

text:返回alert、confirm、prompt中的文字信息

accept:点击确认按钮

dismiss:点击取消按钮

send_keys:在alert、confirm有对话框时输入值

python代码:

 dr.get("http://www.baidu.com") set_link=dr.find_element_by_xpath("//div[@id='u1']/a[@class='pf']")#找到设置链接元素 ActionChains(dr).move_to_element(set_link).perform()#鼠标移动到设置上 dr.find_element_by_xpath("//a[@class='setpref']").click()#点击搜索设置链接 time.sleep(3) #加等待时间 等按钮可用,否则会报错 save_set=dr.find_element_by_css_selector("#gxszButton > a.prefpanelgo")#获取保存设置按钮 save_set.click()#点击保存设置按钮   alert=dr.switch_to_alert()     #进入alert print'----弹出alert中内容为:',alert.text #打印对话框里的文字内容 alert.accept()#对话框里点击alert中确定按钮 #alert.dismiss() #对话框里点击取消按钮 #alert.send_keys("对话框中输入的内容") #在对话框里输入内容

十二、上传文件

分2种:普通上传、插件上传

普通上传:将本地文件的路径作为一个值放到input标签中,通过form表单提交时,将值传给服务器中去

插件上传:指基于flash、javascript或ajax技术实现的上传功能或插件。

1.针对普通上传用send_keys实现

python代码:

dr.get("D:\\workspace\\pySelenium\\resources\\upload.htm") loadFile=dr.find_element_by_name("filebutton")# 获取上传文件input元素节点 loadFile.send_keys("D:\\workspace\\pySelenium\\resources\\frame.htm")#输入上传文件地址来实现上传

2.插件上传:使用AutoIt实现,--需要安装AutoIt程序

AutoIt安装,使用暂时略,需要时再追加,流程为:用AutoIt编写上传文件脚本生成exe文件,在python脚本中进行调用

python代码:

 loadFile=dr.find_element_by_name("filebutton")# 获取上传按钮 loadFile.click() #点击上传按钮,弹出上传对话框 os.system("D:\\autoItFile.exe") #调用autoIt生成的exe文件,实现导入

十三、下载文件:使用AutoIt实现,--需要安装AutoIt程序,方法同上传

python代码:

 ffp=webdriver.FirefoxProfile() ffp.set_preference("browser.download.folderList",2)#0:代表下载到浏览器默认路径下;2:下载到指定目录 ffp.set_preference("browser.download.manager.showWhenStarting",False)#是否显示开始:True:显示;False:不显示 ffp.set_preference("browser.download.dir", os.getcwd())#指定下载文件目录,os.getcwd()无参数,返回当前目录 # ffp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")#下载文件类型, #指定下载页面的content-type值,application/octet-stream为文件类型,http-content-type常用对照表搜索百度 dr=webdriver.Firefox(firefox_profile=ffp) dr.get("https://pypi.python.org/pypi/selenium#downloads") dr.find_element_by_xpath("//div[@id='content']/div[3]/table/tbody/tr[3]/td[1]/span/a[1]").click() #接下来使用autoIt实现 

十四、cookies操作

webdriver操作cookies的方法:

get_cookies():获得所有cookies的值

get_cookie(name):获得有特定name值的cookie信息

add_cookie(cookie_dict):添加cookie,必须有name和value

delete_cookie(name):删除特定名称的cookie信息,通过name找到特定的cookie并删除

delete_all_cookies():删除浏览器中所有cookie的信息

注意:

1.cookie是以字典形式进行存储的;

2.使用场景:如登录功能会把用户名写入浏览器cookie指定key为username,那么就可以通过get_cookies()找到username,打印value,找不到说明保存浏览器的cookie是有bug的。

python代码:

 num=1 dr.get("http://www.baidu.com") cookies=dr.get_cookies()#获取cookie的所有信息 for ck in cookies: print'----所有cookie',num,':',ck #打印cookie的所有信息 num=num+1 print'----按name查cookie:',dr.get_cookie("PSTM")#通过cookie的name获取cookie信息 dr.add_cookie({'name':'hello','value':'123456789'})#向name和value添加会话信息 cookies2=dr.get_cookies()#重新获取cookie的所有信息 for ck2 in cookies2: if ck2['name']=='hello': print"----加入的cookie信息:%s-->%s",(ck2['name'],ck2['value'])

十五、javascript调用,python使用的方法:execute_script()

python代码:

dr.get("http://www.baidu.com") dr.find_element_by_id("kw").send_keys("selenium") dr.find_element_by_id("su").click() js="var q=document.documentElement.scrollTop=1000" #滚动条滚到最下面 dr.execute_script(js) time.sleep(4) js2="var q=document.documentElement.scrollTop=0"  #滚动条滚到页面顶 dr.execute_script(js2)

十六、截图,适用于脚本出错时,对当前窗口进行截图保存,使用函数:get_screenshot_as_file()

python代码:

 dr.get("http://www.baidu.com") try: dr.find_element_by_id("kw1").send_keys("selenium") dr.find_element_by_id("su").click() exceptNoSuchElementException,msg: dr.get_screenshot_as_file("d:\\error.jpg") #截图输出到d盘 print msg dr.close()

十七、关闭窗口

quit():退出相关驱动程序并关闭所有窗口。

close():关闭当前窗口,打给多个窗口时,可使用来关闭当前窗口

十八、验证码处理

方法1:去掉验证码,问题:如果是在正式环境跑脚本那么在取掉会存在风险

方法2:设置万能验证码,不需要取消验证码,在程序中留后门--设置一个万能验证码,输入万能验证码了就标识通过

python代码:

  import random randnum=random.randint(1000,9999) print"----生成随机数为:",randnum input_num=input(u"请输入验证码:") print"----输入验证码为:",input_num if input_num==randnum: print"随机数正确,登录成功" elif input_num==1234: print"输入正确,登录成功" else: print"登录失败"

方法3:使用cookie方法获取,读取之前登录的cookie值访问时,直接登录,不需要验证码

--------------------------------------------------- CMD -----------命令启动Python脚本

文件命名为:test.bat 貌似不能用

 @echo off echo. python E:\pythonScript\Auto_linknetwork.py cd /D C:\Python27 python.exe rm #!C:\Python27/python.exe import os; i=os.system("清屏",cls); import time; #-*-格式时间格式[格式化成2009-03-20 11:45:39形式]-*- time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()); print ("系统当前时间为 :", localtime); 

1、截屏

driver.save_screenshot('E:\\pythonScript\\images\\'+strTime+'baidu.png')

三. WebElement接口获取值

通过WebElement接口可以获取常用的值,这些值同样非常重要。 size 获取元素的尺寸

text 获取元素的文本

get_attribute(name) 获取属性值

location 获取元素坐标,先找到要获取的元素,再调用该方法

page_source 返回页面源码

driver.title 返回页面标题

current_url 获取当前页面的URL

is_displayed() 设置该元素是否可见

is_enabled() 判断元素是否被使用

is_selected() 判断元素是否被选中

tag_name 返回元素的tagName

四.得到函数中的返回值

函数()

  def returnval():   driver = webdriver.Chrome()  print u"\n回传值"  return driver   #returnval()   src = ("http://hos.sf-express.com")   returnval().get(src)   print returnval()

将函数作为返回值返回,不返回结果只返回函数

  def lazy_sum(*args):   def sum():    ax = 0    for n in args:     ax = ax + n    return ax   return sum  >> f = lazy_sum(1, 3, 2, 7, 9)  >> f  >> f()  #此时才是真正的计算出函数值;

新建实例driver = webdriver.Chrome()

1.获取当前页面的Url函数

方法:current_url

实例:

driver.current_url

2.获取元素坐标

方法:location

解释:首先查找到你要获取元素的,然后调用location方法

实例:

driver.find_element_by_xpath("//*[@id='tablechart']/tbody/tr[14]/td[9]").location

3.表单的提交

方法:submit

解释:查找到表单(from)直接调用submit即可

实例:

driver.find_element_by_id("form1").submit()

4.获取CSS的属性值

方法:value_of_css_property(css_name)

实例:

driver.find_element_by_css_selector("input.btn").value_of_css_property("input.btn")

5.获取元素的属性值

方法:get_attribute(element_name)

实例:

driver.find_element_by_id("sellaiyuan").get_attribute("sellaiyuan")

6.判断元素是否被选中

方法:is_selected()

实例:

driver.find_element_by_id("form1").is_selected()

7.返回元素的大小

方法:size

实例:

driver.find_element_by_id("iptPassword").size

返回值:{'width': 250, 'height': 30}

8.判断元素是否显示

方法:is_displayed()

实例:

driver.find_element_by_id("iptPassword").is_displayed()

9.判断元素是否被使用

方法:is_enabled()

实例:

driver.find_element_by_id("iptPassword").is_enabled()

10.获取元素的文本值

方法:text

实例:driver.find_element_by_id("iptUsername").text

11.元素赋值

方法:send_keys(*values)

实例:

driver.find_element_by_id("iptUsername").send_keys('admin')

注意如果是函数需要增加转义符u,eg.

driver.find_element_by_id("iptUsername").send_keys(u'青春')

12.返回元素的tagName

方法:tag_name

实例:

driver.find_element_by_id("iptUsername").tag_name

13.删除浏览器所以的cookies

方法:delete_all_cookies()

实例:

driver.delete_all_cookies()

14.删除指定的cookie

方法:delete_cookie(name)

实例:deriver.delete_cookie("my_cookie_name")

15.关闭浏览器

方法:close()

实例:driver.close()

16.关闭浏览器并且推出驱动程序

方法:quit()

实例:driver.quit()

17.返回上一页

方法:back()

实例:driver.back()

18.设置等待超时

方法:implicitly_wait(wait_time)

实例:driver.implicitly_wait(30)

19.浏览器窗口最大化

方法:maximize_window()

实例:driver.maximize_window()

20.查看浏览器的名字

方法:name

实例:drvier.name

以上这篇关于Python 常用获取元素 Driver 总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


  • 上一条:
    Python完全识别验证码自动登录实例详解
    下一条:
    python [:3] 实现提取数组中的数
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客