• selenium基本用法


    一.元素操作

    send_keys:赋值

    clear:清空

    click:点击

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from selenium import webdriver
    from selenium.webdriver.common.by import By
     
     
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver_css=driver.find_element(by=By.CSS_SELECTOR, value="#kw")
    driver_css.send_keys("作者最帅"# baidu搜索框填下搜索的内容
    driver_css.clear()  # 清空搜索的内容
    driver.find_element(by=By.CSS_SELECTOR, value="#su").click()  # 点击搜索
    driver.quit()  # 关闭所以窗口

    二.窗口操作

    maximize_window():窗口最大化

    minimize_window():窗口最小化

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from selenium import webdriver
    from time import sleep
     
     
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver.maximize_window()  # 最大化
    sleep(3)
    driver.minimize_window()  # 最小化
    sleep(3)
    driver.quit()  # 关闭所以窗口

    set_window_size(x,y):设置窗口大小,x为宽,y为高

    set_window_position(x,y):设置窗口位置,x横坐标,y纵坐标

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    from selenium import webdriver
    from time import sleep
     
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver.set_window_size(100, 600# 设置窗口大小
    sleep(3)
    driver.set_window_position(100, 500# 设置窗口位置
    sleep(3)
    driver.quit()  # 关闭所以窗口

    back():后退

    forward():前进

    refresh():刷新页面

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from time import sleep
     
     
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver_css=driver.find_element(by=By.CSS_SELECTOR, value="#kw")
    driver_css.send_keys("作者最帅"# baidu搜索框填下搜索的内容
    driver.find_element(by=By.CSS_SELECTOR, value="#su").click()  # 点击搜索
    driver.back()  # 后退
    sleep(3)
    driver.forward()  # 前进
    sleep(3)
    driver.refresh()  # 刷新
    driver.quit()  # 关闭所以窗口

    close():关闭当前主窗口(driver.get()打开的窗口)

    quit():关闭当前所有窗口

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from time import sleep
     
     
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver.find_element(by=By.XPATH, value="//span[contains(text(),'解码十年 解锁出一串发展密码')]").click()
    sleep(3)
    driver.close()  # 关闭https://www.baidu.com这个窗口
    driver.quit()  # 关闭所有窗口

    三.窗口切换

    selenium元素定位默认定位的是主窗口,若从主窗口再打开一个窗口的话需要重新切换到指定的窗口才能定位

    current_window_handle:获取当前窗口的window_name

    window_handles:获取所有窗口的window_name值,返回的是list

    switch_to.window():切换窗口

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from time import sleep
     
     
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver.find_element(by=By.XPATH, value="//span[contains(text(),'解码十年 解锁出一串发展密码')]").click()
    sleep(3)
    print(driver.current_window_handle)  # 打印当前窗口的window_name
    window_name_list = driver.window_handles  # 获取当前所有窗口的window_name值
    driver.switch_to.window(window_name_list[-1])  # 切换第一个打开的窗口
    print(driver.current_window_handle)  # 打印切换后的window_name
    driver.quit()  # 关闭所有窗口

    这里需要注意的是switch_to.window(list[下标]):

    0:表示切到主窗口

    -1:表示切到第一个打开的窗口

    -2:表示第二个打开的窗口,依次类推

    四.鼠标操作

    double_click():鼠标双击

    context_click():鼠标右击

    click():鼠标单击

    drag_and_drop(element1,element2):元素拖拽,把element1元素拖拽到element2位置

    drag_and_drop_by_offset(element,x,y):元素拖拽,相对于element元素当前位置拖拽到(原x坐标+x,原y坐标+y)

    move_to_element(element):鼠标悬停在element元素位置

    move_to_element_with_offset(element,x,y):和drag_and_drop_by_offset作用相同,x,y值可为正负

    click_and_hold(element):鼠标左键按住element元素

    move_by_offset(x,y):相对于鼠标按住的位置移动(x,y)

    release():释放按住的鼠标

    注:后三个一般是放在一起使用的。所有的方法都是由ActionChains(driver)实例对象调用

    1.模拟鼠标操作前需要导入对应的包

    1
    from selenium.webdriver import ActionChains

    2.实例化鼠标对象

    1
    action = ActionChains(driver)

    3.执行鼠标操作

    1
    action.perform()

    4.实例(element为需要操作的元素)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from time import sleep
    from selenium.webdriver import ActionChains
     
     
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    action = ActionChains(driver)  # 实例化鼠标对象
    action.double_click(element)  # 双击(左键双击)
    action.context_click(element)  # 鼠标右击
    action.click(element)  # 鼠标单击
    action.perform()  # 执行鼠标操作
    driver.quit()  # 关闭所有窗口

    五.键盘操作

    1.模拟键盘操作前要先导入Keys类

    1
    from selenium.webdriver.common.keys import Keys

    2.使用时用Keys.的方式去调用Keys类中的属性

    ENTER:enter回车键

    SPACE:空格键

    DELETE:删除键

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from time import sleep
    from selenium.webdriver.common.keys import Keys
     
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver_css = driver.find_element(by=By.CSS_SELECTOR, value="#kw")
    driver_css.send_keys("作者是帅哥")
    driver_css.send_keys(Keys.SPACE)  # 打印空格键
    sleep(2)
    driver_css.send_keys(Keys.ENTER)  # 回车搜索
    sleep(2)
    driver.quit()  # 关闭所有窗口

    3.两键组合使用

    CONTROL:ctrl键

    ctrl+a:全选

    ctrl+c:复制

    ctrl+v:粘贴

    ctrl+x:剪切

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from time import sleep
    from selenium.webdriver.common.keys import Keys
     
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver_css = driver.find_element(by=By.CSS_SELECTOR, value="#kw")
    driver_css.send_keys("作者是帅哥")
    driver_css.send_keys(Keys.CONTROL, "a"# 全选
    sleep(1)
    driver_css.send_keys(Keys.CONTROL, "c"# 复制
    sleep(1)
    driver_css.send_keys(Keys.RIGHT)  # 向右箭头
    sleep(1)
    driver_css.send_keys(Keys.CONTROL, "v"# 粘贴
    sleep(1)
    driver_css.send_keys(Keys.CONTROL, "a"# 全选
    sleep(1)
    driver_css.send_keys(Keys.CONTROL, "x"# 剪切
    sleep(1)
    driver.quit()  # 关闭所有窗口 

    5.Keys类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    class Keys:
        """
        Set of special keys codes.
        """
     
        NULL = '\ue000'
        CANCEL = '\ue001'  # ^break
        HELP = '\ue002'
        BACKSPACE = '\ue003'
        BACK_SPACE = BACKSPACE  # 删除
        TAB = '\ue004'  # tab键
        CLEAR = '\ue005'
        RETURN = '\ue006'
        ENTER = '\ue007'  # 回车键
        SHIFT = '\ue008'  # shift键
        LEFT_SHIFT = SHIFT  # shift键
        CONTROL = '\ue009'
        LEFT_CONTROL = CONTROL  # ctrl键
        ALT = '\ue00a'  # alt键
        LEFT_ALT = ALT  # alt键
        PAUSE = '\ue00b'
        ESCAPE = '\ue00c'  # esc键
        SPACE = '\ue00d'  # 空格键
        PAGE_UP = '\ue00e'  # pgup
        PAGE_DOWN = '\ue00f'  # pgdn
        END = '\ue010'  # end
        HOME = '\ue011'  # home
        LEFT = '\ue012'  # 左箭头
        ARROW_LEFT = LEFT
        UP = '\ue013'  # 上箭头
        ARROW_UP = UP
        RIGHT = '\ue014'  # 右箭头
        ARROW_RIGHT = RIGHT
        DOWN = '\ue015'  # 下箭头
        ARROW_DOWN = DOWN
        INSERT = '\ue016'  # insert
        DELETE = '\ue017'  # del
        SEMICOLON = '\ue018'  # ;键
        EQUALS = '\ue019'  # =键
     
        NUMPAD0 = '\ue01a'  # 0-9数字
        NUMPAD1 = '\ue01b'
        NUMPAD2 = '\ue01c'
        NUMPAD3 = '\ue01d'
        NUMPAD4 = '\ue01e'
        NUMPAD5 = '\ue01f'
        NUMPAD6 = '\ue020'
        NUMPAD7 = '\ue021'
        NUMPAD8 = '\ue022'
        NUMPAD9 = '\ue023'
        MULTIPLY = '\ue024'  # *
        ADD = '\ue025'  # +
        SEPARATOR = '\ue026'  # ,
        SUBTRACT = '\ue027'  # -
        DECIMAL = '\ue028'  # .
        DIVIDE = '\ue029'  # /
     
        F1 = '\ue031'  # F1-F12
        F2 = '\ue032'
        F3 = '\ue033'
        F4 = '\ue034'
        F5 = '\ue035'
        F6 = '\ue036'
        F7 = '\ue037'
        F8 = '\ue038'
        F9 = '\ue039'
        F10 = '\ue03a'
        F11 = '\ue03b'
        F12 = '\ue03c'
     
        META = '\ue03d'
        COMMAND = '\ue03d'
        ZENKAKU_HANKAKU = '\ue040'

    4.key_down和key_up

    使用鼠标事件也可以模拟键盘操作,其中用到的就是鼠标两个方法key_down和key_up

    key_down:模拟键盘操作

    key_up:释放key_down按下的键

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from time import sleep
    from selenium.webdriver import ActionChains
    from selenium.webdriver.common.keys import Keys
     
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver_css = driver.find_element(by=By.CSS_SELECTOR, value="#kw")
    driver_css.send_keys("作者是帅哥")
    action = ActionChains(driver)
    action.key_down(Keys.CONTROL, element=driver_css).send_keys("a"# 模拟键盘按下ctrl+a
    action.key_up(Keys.CONTROL)  # 释放按住的ctrl键
    sleep(2)
    action.key_down(Keys.DELETE)  # 模拟delete
    action.key_up(Keys.DELETE)  # 释放delete键
    action.perform()
    sleep(2)
    driver.quit()  # 关闭所有窗口

    六.元素等待

    为什么要设置元素等待:

    电脑cpu运行的速度大于网页加载,会导致一个问题代码运行到这一步是,网页还没有渲染完,出现元素找不到问题。

    1.强制等待

    不管有没有找到元素,执行到该步时都会等待设置的秒数

    1
    time.sleep(1)

    sleep(number):number为等待时长,单位为秒

    2.隐性等待

    设置全局等待,查找每个元素时如果第一时间没有找到,就会等待设置的时间(s),超出时间限制后还是没有找到就会报错

    1
    driver.implicitly_wait(50)

    3.显性等待(具体实现baidou吧)

    为单个元素设置等待时长,可设置轮询时间,既每隔多少s查询一次,超出设置的最大时间报错

    七.下拉框

    我们先来了解下html中下拉框的写法吧,由id="wq">

        
        
        
    </select>
    </body>
    </html>

个人觉得使用xpth方法定位,利用层级关系也可以正常定位对应的option,那么既然有专门处理下拉框的方法,也就学习一下

1.导入Select模块

1
from selenium.webdriver.support.select import Select

2.实例化下拉框对象

1
sele = Select(driver_id)

返回的是一个list集合

3.定位option的方法

select_by_index(下标):根据下标定位对应的option

select_by_value(value值):根据option中value属性值定位

select_by_visible_text(选项值):根据对应的option选项值定位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
from selenium.webdriver.support.select import Select
 
driver = webdriver.Chrome()
driver.get("url")
driver_css = driver.find_element(by=By.CSS_SELECTOR, value="#wq")
select = Select(driver_css)  # 实例化select对象
select.select_by_index(1# 根据下标定位
sleep(1)
select.select_by_value("王五"# 根据value值定位
sleep(1)
select.select_by_visible_text("张"# 根据选项值定位
sleep(1)
driver.quit()  # 关闭所有窗口

4.既然有选择下拉框的方法,那么也少不了取消选择下拉框的方法

sele.deselect_all():取消全部选择

sele.deselect_by_index():根据下标取消选择

sele.deselect_by_value():根据value值取消选择

sele.deselect_by_visible_text():根据text取消选择

注:不做演示了,该方法要在对应的选项选中后才可取消选择,且只适用于多选的下拉框试用。带multiple属性值的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
="en">
    ="UTF-8">
    Title<</code><code class="python keyword">/</code><code class="python plain">title></code></div><div class="line number6 index5 alt1"><code class="python plain"><</code><code class="python keyword">/</code><code class="python plain">head></code></div><div class="line number7 index6 alt2"><code class="python plain"><body></code></div><div class="line number8 index7 alt1"><code class="python plain"><select </code><code class="python functions">id</code><code class="python keyword">=</code><code class="python string">"wq"</code> <code class="python plain">multiple></code></div><div class="line number9 index8 alt2"><code class="python spaces">    </code><code class="python plain"><option value</code><code class="python keyword">=</code><code class="python string">"张三"</code><code class="python plain">>张<</code><code class="python keyword">/</code><code class="python plain">option></code></div><div class="line number10 index9 alt1"><code class="python spaces">    </code><code class="python plain"><option value</code><code class="python keyword">=</code><code class="python string">"李四"</code><code class="python plain">>李<</code><code class="python keyword">/</code><code class="python plain">option></code></div><div class="line number11 index10 alt2"><code class="python spaces">    </code><code class="python plain"><option value</code><code class="python keyword">=</code><code class="python string">"王五"</code><code class="python plain">>王<</code><code class="python keyword">/</code><code class="python plain">option></code></div><div class="line number12 index11 alt1"><code class="python plain"><</code><code class="python keyword">/</code><code class="python plain">select></code></div><div class="line number13 index12 alt2"><code class="python plain"><</code><code class="python keyword">/</code><code class="python plain">body></code></div><div class="line number14 index13 alt1"><code class="python plain"><</code><code class="python keyword">/</code><code class="python plain">html></code></div></div></td></tr></tbody></table></div></div> </div> <p><img src="https://1000bd.com/contentImg/2022/08/14/114955147.png" alt="" height="148" loading="lazy"></p> <h2>八.三种弹框<button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false"></button></h2> <p>1.js提供了三种弹框,这里不做多余介绍了,三种弹框的使用方法相同</p> <p>alert():只含确定的选项的弹框</p> <p>confirm():含确定和取消的弹框</p> <p>prompt():可输入内容的弹框</p> <p>2.方法使用</p> <p>alert = driver.switch_to.alert : 切换弹框</p> <p>alert.send_keys("老子是无敌的") : 针对prompt弹框输入内容</p> <p>print(alert.text) : 获取弹框文本</p> <p>alert.dismiss() : 取消(alert不含取消选项,既dismiss和accept效果相同)</p> <p>alert.accept() : 同意</p> <h2>九.滚动条<button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false"></button></h2> <p>我们在一个页面操作元素时,如果页面有下滚动条的话,进入该窗口视窗内展示的是最上面的内容,如果定位到</p> <p>最底部的话,操作元素是看不到效果的。此外,selenium是不提供滚动效果的,但提供了运行js脚本的方法,所</p> <p>以可以通过写js语法来滚动</p> <p>1.方法使用</p> <p>js = 'window.scrollTo(0,100)' : 下滑到指定位置,x水平,y垂直</p> <p>js='window.scrollTo(0,document.body.scrollHeight)' : 滑到页面底部</p> <p>driver.execute_script(js) : 执行js脚本</p> <h2>十.frame表单<button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false"></button></h2> <p>frame其实和切换窗口差不多,进入页面时只会默认定位一个iframe,若想操作其它iframe的元素,需要手动切换</p> <p>driver.switch_to.frame("id/name/element") : 切换到iframe表单</p> <p>driver.switch_to.default_content("id/name/element") : 回到默认页面</p> <p><span style="color: rgba(255, 102, 0, 1)">注:若想从非默认iframe切换到另一个非默认iframe,必须先切回默认的ifrme</span></p> <h2>十一.截图<button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false"></button></h2> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_939390" class="syntaxhighlighter python"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="python plain">driver.get_screenshot_as_file(</code><code class="python string">"./baidu.png"</code><code class="python plain">)</code></div></div></td></tr></tbody></table></div></div> </div> <h2>十二.使用cookie登录<button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false"></button></h2> <p>1.我们以登录知乎为例,首先要获取cookie值</p> <p><img src="https://1000bd.com/contentImg/2022/08/14/114955372.png" alt="" height="254" loading="lazy"></p> <p> </p> <p> 2.添加cookie,add_cookie(cookie)</p> <p>我们进入add_cookie方法源代码可以看见需要传递一个字典类型的值,因此cookie传入时要以字典的方法传入</p> <p><img src="https://1000bd.com/contentImg/2022/08/14/114955522.png" alt="" height="231" loading="lazy"></p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_393385" class="syntaxhighlighter python"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="python plain">cookies </code><code class="python keyword">=</code> <code class="python plain">{</code></div><div class="line number2 index1 alt1"><code class="python spaces">    </code><code class="python string">'name'</code><code class="python plain">: </code><code class="python string">'z_c0'</code><code class="python plain">,</code></div><div class="line number3 index2 alt2"><code class="python spaces">    </code><code class="python string">'value'</code><code class="python plain">: </code><code class="python string">'获取的cookie值'</code><code class="python plain">}</code></div></div></td></tr></tbody></table></div></div> </div> <p>3.刷新页面</p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_214720" class="syntaxhighlighter python"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="python plain">driver.refresh()</code></div></div></td></tr></tbody></table></div></div> </div> <p>4.完整代码</p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_161479" class="syntaxhighlighter python"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="python keyword">from</code> <code class="python plain">selenium </code><code class="python keyword">import</code> <code class="python plain">webdriver</code></div><div class="line number2 index1 alt1"><code class="python keyword">from</code> <code class="python plain">selenium.webdriver.common.by </code><code class="python keyword">import</code> <code class="python plain">By</code></div><div class="line number3 index2 alt2"> </div><div class="line number4 index3 alt1"><code class="python plain">driver </code><code class="python keyword">=</code> <code class="python plain">webdriver.Chrome()</code></div><div class="line number5 index4 alt2"><code class="python plain">driver.get(</code><code class="python string">"https://www.zhihu.com/signin"</code><code class="python plain">)</code></div><div class="line number6 index5 alt1"><code class="python plain">cookies </code><code class="python keyword">=</code> <code class="python plain">{</code></div><div class="line number7 index6 alt2"><code class="python spaces">    </code><code class="python string">"name"</code><code class="python plain">: </code><code class="python string">"z_c0"</code><code class="python plain">,</code></div><div class="line number8 index7 alt1"><code class="python spaces">    </code><code class="python string">"value"</code><code class="python plain">: </code><code class="python string">"你的知乎cookie值"</code></div><div class="line number9 index8 alt2"><code class="python plain">}</code></div><div class="line number10 index9 alt1"><code class="python plain">driver.add_cookie(cookies)  </code><code class="python comments"># 添加cookie</code></div><div class="line number11 index10 alt2"><code class="python plain">driver.refresh()  </code><code class="python comments"># 刷新页面,登录成功</code></div><div class="line number12 index11 alt1"><code class="python plain">driver.quit()  </code><code class="python comments"># 关闭所有窗口</code></div></div></td></tr></tbody></table></div></div> </div> <h2>十三.判断元素是否可点击,可使用,已选中<button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false"></button></h2> <p>is_selected():判断元素是否被选中,选中返回true,否则false</p> <p>is_displayed():判断端上是否可见,可见返回true,否则返回false</p> <p>id_enabled():判断按钮是否可点击,可点击返回true,否则返回false</p> <p>1.先来看下html</p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_356371" class="syntaxhighlighter python"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="python plain"><!DOCTYPE html></code></div><div class="line number2 index1 alt1"><code class="python plain"><html lang</code><code class="python keyword">=</code><code class="python string">"en"</code><code class="python plain">></code></div><div class="line number3 index2 alt2"><code class="python plain"><head></code></div><div class="line number4 index3 alt1"><code class="python spaces">    </code><code class="python plain"><meta charset</code><code class="python keyword">=</code><code class="python string">"UTF-8"</code><code class="python plain">></code></div><div class="line number5 index4 alt2"><code class="python spaces">    </code><code class="python plain"><title>Title<</code><code class="python keyword">/</code><code class="python plain">title></code></div><div class="line number6 index5 alt1"><code class="python plain"><</code><code class="python keyword">/</code><code class="python plain">head></code></div><div class="line number7 index6 alt2"> </div><div class="line number8 index7 alt1"><code class="python plain"><body></code></div><div class="line number9 index8 alt2"><code class="python plain"><select </code><code class="python functions">id</code><code class="python keyword">=</code><code class="python string">"wq"</code><code class="python plain">></code></div><div class="line number10 index9 alt1"><code class="python spaces">    </code><code class="python plain"><option>张三<</code><code class="python keyword">/</code><code class="python plain">option></code></div><div class="line number11 index10 alt2"><code class="python spaces">    </code><code class="python plain"><option selected</code><code class="python keyword">=</code><code class="python string">"selected"</code><code class="python plain">>李四<</code><code class="python keyword">/</code><code class="python plain">option>  <!</code><code class="python keyword">-</code><code class="python keyword">-</code><code class="python plain">selected设置默认选中</code><code class="python keyword">-</code><code class="python keyword">-</code><code class="python plain">></code></div><div class="line number12 index11 alt1"><code class="python plain"><</code><code class="python keyword">/</code><code class="python plain">select></code></div><div class="line number13 index12 alt2"><code class="python plain"><button </code><code class="python functions">type</code><code class="python keyword">=</code><code class="python string">"button"</code> <code class="python plain">disabled</code><code class="python keyword">=</code><code class="python string">"disabled"</code> <code class="python functions">id</code><code class="python keyword">=</code><code class="python string">"button"</code><code class="python plain">>登录<</code><code class="python keyword">/</code><code class="python plain">button>  <!</code><code class="python keyword">-</code><code class="python keyword">-</code><code class="python plain">disabled设置按钮不可点击</code><code class="python keyword">-</code><code class="python keyword">-</code><code class="python plain">></code></div><div class="line number14 index13 alt1"><code class="python plain"><button </code><code class="python functions">type</code><code class="python keyword">=</code><code class="python string">"button"</code> <code class="python plain">style</code><code class="python keyword">=</code><code class="python string">"display: none"</code><code class="python plain">>注册<</code><code class="python keyword">/</code><code class="python plain">button>  <!</code><code class="python keyword">-</code><code class="python keyword">-</code><code class="python plain">display: none设置元素不可见</code><code class="python keyword">-</code><code class="python keyword">-</code><code class="python plain">></code></div><div class="line number15 index14 alt2"><code class="python plain"><</code><code class="python keyword">/</code><code class="python plain">body></code></div><div class="line number16 index15 alt1"><code class="python plain"><</code><code class="python keyword">/</code><code class="python plain">html></code></div></div></td></tr></tbody></table></div></div> </div> <p>2.实例</p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_204819" class="syntaxhighlighter python"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="python keyword">from</code> <code class="python plain">selenium </code><code class="python keyword">import</code> <code class="python plain">webdriver</code></div><div class="line number2 index1 alt1"><code class="python keyword">from</code> <code class="python plain">selenium.webdriver.common.by </code><code class="python keyword">import</code> <code class="python plain">By</code></div><div class="line number3 index2 alt2"><code class="python keyword">from</code> <code class="python plain">selenium.webdriver.support.select </code><code class="python keyword">import</code> <code class="python plain">Select</code></div><div class="line number4 index3 alt1"> </div><div class="line number5 index4 alt2"><code class="python plain">driver </code><code class="python keyword">=</code> <code class="python plain">webdriver.Chrome()</code></div><div class="line number6 index5 alt1"><code class="python plain">driver.get(</code><code class="python string">"html 地址"</code><code class="python plain">)</code></div><div class="line number7 index6 alt2"><code class="python plain">driver_css </code><code class="python keyword">=</code> <code class="python plain">driver.find_element(by</code><code class="python keyword">=</code><code class="python plain">By.CSS_SELECTOR, value</code><code class="python keyword">=</code><code class="python string">"#wq > option:nth-child(2)"</code><code class="python plain">)</code></div><div class="line number8 index7 alt1"><code class="python functions">print</code><code class="python plain">(driver_css.is_selected())  </code><code class="python comments"># 判断元素是否被选中</code></div><div class="line number9 index8 alt2"><code class="python plain">driver_id </code><code class="python keyword">=</code> <code class="python plain">driver.find_element(by</code><code class="python keyword">=</code><code class="python plain">By.</code><code class="python functions">ID</code><code class="python plain">, value</code><code class="python keyword">=</code><code class="python string">"button"</code><code class="python plain">)</code></div><div class="line number10 index9 alt1"><code class="python functions">print</code><code class="python plain">(driver_id.is_enabled())  </code><code class="python comments"># 判断元素是否可点击</code></div><div class="line number11 index10 alt2"><code class="python plain">driver_tag_name </code><code class="python keyword">=</code> <code class="python plain">driver.find_elements(by</code><code class="python keyword">=</code><code class="python plain">By.TAG_NAME, value</code><code class="python keyword">=</code><code class="python string">"button"</code><code class="python plain">)</code></div><div class="line number12 index11 alt1"><code class="python functions">print</code><code class="python plain">(driver_tag_name[</code><code class="python value">1</code><code class="python plain">].is_displayed())  </code><code class="python comments"># 判断元素是否可见</code></div><div class="line number13 index12 alt2"><code class="python plain">driver.quit()  </code><code class="python comments"># 关闭所有窗口</code></div></div></td></tr></tbody></table></div></div> </div> <h2>十四.其它方法使用<button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false"></button></h2> <p>title:获取当前窗口标题</p> <p>current_url:获取当前窗口url</p> <p>text:获取元素文本内容</p> <p>size:获取元素大小</p> <p>get_attribute(属性):获取属性值</p> <div class="cnblogs_Highlighter"> <pre>from selenium import webdriver<br>from selenium.webdriver.common.by import By<br><br>driver = webdriver.Chrome()<br>driver.get("https://www.baidu.com")<br>print(driver.title) # 获取页面标题<br>print(driver.current_url) # 获取页面url<br>driver_css = driver.find_element(by=By.CSS_SELECTOR, value="#su")<br>print(driver_css.get_attribute("id")) # 获取id值<br>print(driver_css.size) # 获取元素大小<br>print(driver_css.text) # 获取元素文本<br>driver.quit() # 关闭所有窗口</pre> </div> <h2>十五.常见面试题<button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false"></button></h2> <p>1.动态元素如何定位</p> <p>动态元素分为两种</p> <p>(1)元素值部分可变,部分固定</p> <p>xpath和css定位都提供了模糊匹配,可根据固定部分的值来匹配结果</p> <p>xpath模糊匹配</p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_158100" class="syntaxhighlighter python"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="python plain">driver.find_element(by</code><code class="python keyword">=</code><code class="python plain">By.XPATH, value</code><code class="python keyword">=</code><code class="python string">"//*[contains(@name,'na')"</code><code class="python plain">).send_keys(</code><code class="python string">"作者说帅哥"</code><code class="python plain">)  </code><code class="python comments"># contains匹配含有na的name属性值</code></div><div class="line number2 index1 alt1"><code class="python plain">driver.find_element(by</code><code class="python keyword">=</code><code class="python plain">By.XPATH, value</code><code class="python keyword">=</code><code class="python string">"//*[starts-with(@name,'2')"</code><code class="python plain">).send_keys(</code><code class="python string">"12"</code><code class="python plain">)  </code><code class="python comments"># start-with匹配以2开头的name属性值</code></div><div class="line number3 index2 alt2"><code class="python plain">driver.find_element(by</code><code class="python keyword">=</code><code class="python plain">By.XPATH, value</code><code class="python keyword">=</code><code class="python string">"//*[ends-with(@name,'2')"</code><code class="python plain">).send_keys(</code><code class="python string">"12"</code><code class="python plain">)  </code><code class="python comments"># ends-with匹配以2结尾的name属性值</code></div></div></td></tr></tbody></table></div></div> </div> <p>css模糊匹配</p> <ul> <li>匹配以XX开头的:value="[id^='head']")</li> <li>匹配以XX结尾:value="[id$='tail']"</li> <li>匹配包含XX的:valur="[name*='like']"</li> </ul> <p>(2)元素值都不是固定值</p> <p>元素值不是固定的,此时用属性值定位是行不通的,不过可以利用层级关系定位</p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_881032" class="syntaxhighlighter python"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="python plain"><!DOCTYPE html></code></div><div class="line number2 index1 alt1"><code class="python plain"><html lang</code><code class="python keyword">=</code><code class="python string">"en"</code><code class="python plain">></code></div><div class="line number3 index2 alt2"><code class="python plain"><head></code></div><div class="line number4 index3 alt1"><code class="python spaces">    </code><code class="python plain"><meta charset</code><code class="python keyword">=</code><code class="python string">"UTF-8"</code><code class="python plain">></code></div><div class="line number5 index4 alt2"><code class="python spaces">    </code><code class="python plain"><title>Title<</code><code class="python keyword">/</code><code class="python plain">title></code></div><div class="line number6 index5 alt1"><code class="python plain"><</code><code class="python keyword">/</code><code class="python plain">head></code></div><div class="line number7 index6 alt2"> </div><div class="line number8 index7 alt1"><code class="python plain"><body></code></div><div class="line number9 index8 alt2"><code class="python plain"><select></code></div><div class="line number10 index9 alt1"><code class="python spaces">    </code><code class="python plain"><option>张三<</code><code class="python keyword">/</code><code class="python plain">option></code></div><div class="line number11 index10 alt2"><code class="python spaces">    </code><code class="python plain"><option>李四<</code><code class="python keyword">/</code><code class="python plain">option></code></div><div class="line number12 index11 alt1"><code class="python plain"><</code><code class="python keyword">/</code><code class="python plain">select></code></div><div class="line number13 index12 alt2"> </div><div class="line number14 index13 alt1"><code class="python plain"><</code><code class="python keyword">/</code><code class="python plain">body></code></div><div class="line number15 index14 alt2"><code class="python plain"><</code><code class="python keyword">/</code><code class="python plain">html></code></div></div></td></tr></tbody></table></div></div> </div> <p>  </p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_901332" class="syntaxhighlighter python"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="python keyword">from</code> <code class="python plain">selenium </code><code class="python keyword">import</code> <code class="python plain">webdriver</code></div><div class="line number2 index1 alt1"><code class="python keyword">from</code> <code class="python plain">selenium.webdriver.common.by </code><code class="python keyword">import</code> <code class="python plain">By</code></div><div class="line number3 index2 alt2"><code class="python keyword">from</code> <code class="python plain">selenium.webdriver.support.select </code><code class="python keyword">import</code> <code class="python plain">Select</code></div><div class="line number4 index3 alt1"> </div><div class="line number5 index4 alt2"><code class="python plain">driver </code><code class="python keyword">=</code> <code class="python plain">webdriver.Chrome()</code></div><div class="line number6 index5 alt1"><code class="python plain">driver.get(</code><code class="python string">"http://localhost:63342/pytest_selenium/lianxi/select.html?_ijt=6s5tqd9kb7fi081s4dl8trmir3"</code><code class="python plain">)</code></div><div class="line number7 index6 alt2"><code class="python plain">driver_xpath </code><code class="python keyword">=</code> <code class="python plain">driver.find_element(by</code><code class="python keyword">=</code><code class="python plain">By.XPATH, value</code><code class="python keyword">=</code><code class="python string">"/html[1]/body[1]/select[1]/option[2]"</code><code class="python plain">)</code></div><div class="line number8 index7 alt1"><code class="python functions">print</code><code class="python plain">(driver_xpath.text)</code></div><div class="line number9 index8 alt2"><code class="python plain">driver.quit()  </code><code class="python comments"># 关闭所有窗口</code></div></div></td></tr></tbody></table></div></div> </div> <p>2.如何操作隐藏元素</p> <p>selenium并没有提供操作隐藏元素的方法,但是提供了运行js的方法,所以我们可以通过编写js来操作</p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_405827" class="syntaxhighlighter python"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="python plain"><!DOCTYPE html></code></div><div class="line number2 index1 alt1"><code class="python plain"><html lang</code><code class="python keyword">=</code><code class="python string">"en"</code><code class="python plain">></code></div><div class="line number3 index2 alt2"><code class="python plain"><head></code></div><div class="line number4 index3 alt1"><code class="python spaces">    </code><code class="python plain"><meta charset</code><code class="python keyword">=</code><code class="python string">"UTF-8"</code><code class="python plain">></code></div><div class="line number5 index4 alt2"><code class="python spaces">    </code><code class="python plain"><title>Title<</code><code class="python keyword">/</code><code class="python plain">title></code></div><div class="line number6 index5 alt1"><code class="python plain"><</code><code class="python keyword">/</code><code class="python plain">head></code></div><div class="line number7 index6 alt2"><code class="python plain"><body></code></div><div class="line number8 index7 alt1"> </div><div class="line number9 index8 alt2"><code class="python plain"><button </code><code class="python functions">type</code><code class="python keyword">=</code><code class="python string">"button"</code> <code class="python plain">style</code><code class="python keyword">=</code><code class="python string">"display: none"</code> <code class="python functions">id</code><code class="python keyword">=</code><code class="python string">"wq"</code><code class="python plain">>登录<</code><code class="python keyword">/</code><code class="python plain">button></code></div><div class="line number10 index9 alt1"><code class="python plain"><button </code><code class="python functions">type</code><code class="python keyword">=</code><code class="python string">"button"</code> <code class="python plain">style</code><code class="python keyword">=</code><code class="python string">"display: none"</code> <code class="python plain">name</code><code class="python keyword">=</code><code class="python string">"wq"</code><code class="python plain">>注册<</code><code class="python keyword">/</code><code class="python plain">button></code></div><div class="line number11 index10 alt2"><code class="python plain"><</code><code class="python keyword">/</code><code class="python plain">body></code></div><div class="line number12 index11 alt1"><code class="python plain"><</code><code class="python keyword">/</code><code class="python plain">html></code></div></div></td></tr></tbody></table></div></div> </div> <p>  </p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_926451" class="syntaxhighlighter python"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="python keyword">from</code> <code class="python plain">selenium </code><code class="python keyword">import</code> <code class="python plain">webdriver</code></div><div class="line number2 index1 alt1"><code class="python keyword">from</code> <code class="python plain">time </code><code class="python keyword">import</code> <code class="python plain">sleep</code></div><div class="line number3 index2 alt2"> </div><div class="line number4 index3 alt1"><code class="python plain">driver </code><code class="python keyword">=</code> <code class="python plain">webdriver.Chrome()</code></div><div class="line number5 index4 alt2"><code class="python plain">driver.get(</code><code class="python string">"http://localhost:63342/pytest_selenium/lianxi/select.html?_ijt=9o3tjsdmdq67okafpu0u49td4m"</code><code class="python plain">)</code></div><div class="line number6 index5 alt1"><code class="python plain">js_id </code><code class="python keyword">=</code> <code class="python string">'document.getElementById("wq").style.display = "block"'</code>  <code class="python comments"># 去除隐藏</code></div><div class="line number7 index6 alt2"><code class="python plain">js_name </code><code class="python keyword">=</code> <code class="python string">'document.getElementsByName("wq")[0].style.display = "block"'</code>  <code class="python comments"># 去除隐藏</code></div><div class="line number8 index7 alt1"><code class="python plain">driver.execute_script(js_id)  </code><code class="python comments"># 运行js</code></div><div class="line number9 index8 alt2"><code class="python plain">sleep(</code><code class="python value">1</code><code class="python plain">)</code></div><div class="line number10 index9 alt1"><code class="python plain">driver.execute_script(js_name)  </code><code class="python comments"># 运行js</code></div><div class="line number11 index10 alt2"><code class="python plain">sleep(</code><code class="python value">1</code><code class="python plain">)</code></div><div class="line number12 index11 alt1"><code class="python plain">driver.quit()  </code><code class="python comments"># 关闭所有窗口</code></div></div></td></tr></tbody></table></div></div> </div> <h2>十六.Chropath插件<button class="cnblogs-toc-button" title="显示目录导航" aria-expanded="false"></button></h2> <p>1.下载插件:https://crx4.com/7605.html</p> <p>2.下载完成后解压到本地文件夹,打开浏览器扩展程序,打开开发者模式</p> <p><img src="https://1000bd.com/contentImg/2022/08/14/114955689.png" alt="" height="152" loading="lazy"></p> <p>3.点击加载已解压的扩展程序,导入即可</p> <p> <img src="https://1000bd.com/contentImg/2022/08/14/114955904.png" alt="" height="198" loading="lazy"></p> <p>4.这时我们就可以看见导入的插件了,左侧选择对应的元素,右侧chropath  tab下会展示具体的value值</p> <p><img src="https://1000bd.com/contentImg/2022/08/14/114956111.png" alt="" height="234" loading="lazy"></p> <p>5.chropath不支持切换frame,只能定位默认的frame</p> <p> </p> </div> </div> </li> <li class="list-group-item ul-li"> <b>相关阅读:</b><br> <nobr> <a href="/Article/Index/1660978">探索Linux中的fdisk命令:磁盘分区管理的利器</a> <br /> <a href="/Article/Index/799013">如何找回误删的文件呢?</a> <br /> <a href="/Article/Index/816604">高可用负载均衡集群-LVS负载均衡</a> <br /> <a href="/Article/Index/1446979">Jenkins中强制停止停不下来的job</a> <br /> <a href="/Article/Index/1524060">Linux从0到1——Linux第一个小程序:进度条</a> <br /> <a href="/Article/Index/1355316">vue3常用的东西</a> <br /> <a href="/Article/Index/1239990">uniapp主题切换功能的方式终结篇(全平台兼容)</a> <br /> <a href="/Article/Index/845603">PMP(Project Management Professional)证在哪个行业比较有用?</a> <br /> <a href="/Article/Index/1375671">介绍6种解决电脑找不到vcomp140.dll,无法继续执行代码的方法。</a> <br /> <a href="/Article/Index/1299994">PYTHON用户流失数据挖掘:建立逻辑回归、XGBOOST、随机森林、决策树、支持向量机、朴素贝叶斯和KMEANS聚类用户画像...</a> <br /> </nobr> </li> <li class="list-group-item from-a mb-2"> 原文地址:https://www.cnblogs.com/lihongtaoya/p/16583548.html </li> </ul> </div> <div class="col-lg-4 col-sm-12"> <ul class="list-group" style="word-break:break-all;"> <li class="list-group-item ul-li-bg" aria-current="true"> 最新文章 </li> <li class="list-group-item ul-li"> <nobr> <a href="/Article/Index/1484446">攻防演习之三天拿下官网站群</a> <br /> <a href="/Article/Index/1515268">数据安全治理学习——前期安全规划和安全管理体系建设</a> <br /> <a href="/Article/Index/1759065">企业安全 | 企业内一次钓鱼演练准备过程</a> <br /> <a href="/Article/Index/1485036">内网渗透测试 | Kerberos协议及其部分攻击手法</a> <br /> <a href="/Article/Index/1877332">0day的产生 | 不懂代码的"代码审计"</a> <br /> <a href="/Article/Index/1887576">安装scrcpy-client模块av模块异常,环境问题解决方案</a> <br /> <a href="/Article/Index/1887578">leetcode hot100【LeetCode 279. 完全平方数】java实现</a> <br /> <a href="/Article/Index/1887512">OpenWrt下安装Mosquitto</a> <br /> <a href="/Article/Index/1887520">AnatoMask论文汇总</a> <br /> <a href="/Article/Index/1887496">【AI日记】24.11.01 LangChain、openai api和github copilot</a> <br /> </nobr> </li> </ul> <ul class="list-group pt-2" style="word-break:break-all;"> <li class="list-group-item ul-li-bg" aria-current="true"> 热门文章 </li> <li class="list-group-item ul-li"> <nobr> <a href="/Article/Index/888177">十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!</a> <br /> <a href="/Article/Index/797680">奉劝各位学弟学妹们,该打造你的技术影响力了!</a> <br /> <a href="/Article/Index/888183">五年了,我在 CSDN 的两个一百万。</a> <br /> <a href="/Article/Index/888179">Java俄罗斯方块,老程序员花了一个周末,连接中学年代!</a> <br /> <a href="/Article/Index/797730">面试官都震惊,你这网络基础可以啊!</a> <br /> <a href="/Article/Index/797725">你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法</a> <br /> <a href="/Article/Index/797702">心情不好的时候,用 Python 画棵樱花树送给自己吧</a> <br /> <a href="/Article/Index/797709">通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!</a> <br /> <a href="/Article/Index/797716">13 万字 C 语言从入门到精通保姆级教程2021 年版</a> <br /> <a href="/Article/Index/888192">10行代码集2000张美女图,Python爬虫120例,再上征途</a> <br /> </nobr> </li> </ul> </div> </div> </div> <!-- 主体 --> <!--body结束--> <!--这里是footer模板--> <!--footer--> <nav class="navbar navbar-inverse navbar-fixed-bottom"> <div class="container"> <div class="row"> <div class="col-md-12"> <div class="text-muted center foot-height"> Copyright © 2022 侵权请联系<a href="mailto:2656653265@qq.com">2656653265@qq.com</a>    <a href="https://beian.miit.gov.cn/" target="_blank">京ICP备2022015340号-1</a> </div> <div style="width:300px;margin:0 auto; padding:0px 5px;"> <a href="/regex.html">正则表达式工具</a> <a href="/cron.html">cron表达式工具</a> <a href="/pwdcreator.html">密码生成工具</a> </div> <div style="width:300px;margin:0 auto; padding:5px 0;"> <a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010502049817" style="display:inline-block;text-decoration:none;height:20px;line-height:20px;"> <img src="" style="float:left;" /><p style="float:left;height:20px;line-height:20px;margin: 0px 0px 0px 5px; color:#939393;">京公网安备 11010502049817号</p></a> </div> </div> </div> </div> </nav> <!--footer--> <!--footer模板结束--> <script src="/js/plugins/jquery/jquery.js"></script> <script src="/js/bootstrap.min.js"></script> <!--这里是scripts模板--> <!--scripts模板结束--> </body> </html>