python中selenium使用

Selenium with Python学习笔记整理(网课+网站持续更新) 是 HTML 元素的一个属性,用于标识多个元素共享的样式或功能,因此使用。定位一个元素(通常是一个输入框),然后向这个输入框中输入。输出找到的链接数量,方便确认是否正确定位了页面上的所有链接。(推荐靠谱的博客文章来进行环境配置,具体的我就不写了)│ └── test_search.py # 测试用例。│ ├── __init__.py # 初始化文件。│ ├── element.py # 页面元素封装。│ ├── __init__.py # 初始化文件。│ └── page.py # 页面对象类定义。 阅读详情

Selenium

前言

内容引用原文地址: https://www.jianshu.com/nb/25338984

本文使用python3.6.5.

Selenium是一个用于Web应用程序测试的工具。

Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Firefox,Safari,Chrome,Opera等。

使用python爬虫调用selenium来模拟正常用户访问浏览器.


Selenium和ChromeDriver的安装与配置

安装

安装selenium:

win: pip install selenium
liunx: pip3 install selenium

安装ChromeDriver, 该工具供selenium使用Chrome.

ChromeDriver: http://npm.taobao.org/mirrors/chromedriver/

下载前先查看本地环境的Chrome版本, 然后去上面的link中下载对应的ChromeDriver版本.

ChromeDriver版本支持的Chrome版本
v2.37v64-66
v2.36v63-65
v2.35v62-64
v2.34v61-63
v2.33v60-62
v2.32v59-61
v2.31v58-60
v2.30v58-60
v2.29v56-58
v2.28v55-57
v2.27v54-56
v2.26v53-55
v2.25v53-55
v2.24v52-54
v2.23v51-53

这里只是对应版本中的一部分, 各位的Chrome版本可能超出了这里的版本范围.

但是通过版本对比, 可以发现每个driver版本对应的chrome版本范围为3.

通过规律, 各位就能知道自己该下那个版本的driver了.

配置

  1. 将下载的ChromeDriver进行解压.
  2. 将解压后的文件放入合适的位置.
    1. win: 将解压后的文件放入配置了环境变量的文件夹, 如python的文件夹.
    2. linux: 将解压后的文件移动到/usr/loacl/bin目录中.
  3. 完成.

简单使用

如前面说的, 我们能使用python导入selenium来控制浏览器访问网站.

也就是说能使用py打开浏览器自动化访问.

Chrome有界面运行

#!/usr/bin/env python3
from selenium import werdriver
import time


driver = webdriver.Chrome()     # 创建Chrome对象.
# 操作这个对象.
driver.get('https://www.baidu.com')     # get方式访问百度.
time.sleep(2)
driver.quit()   # 使用完, 记得关闭浏览器, 不然chromedriver.exe进程为一直在内存中.

Chrome无界面运行

#!/usr/bin/env python3
'''
    根据chrome浏览器2017年发布的新特性,
    需要unix版本的chrome版本高于57,
    windows版本的chrome版本高于58,
    才能使用无界面运行.
'''
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time


chrome_opt = Options()      # 创建参数设置对象.
chrome_opt.add_argument('--headless')   # 无界面化.
chrome_opt.add_argument('--disable-gpu')    # 配合上面的无界面化.
chrome_opt.add_argument('--window-size=1366,768')   # 设置窗口大小, 窗口大小会有影响.

# 创建Chrome对象并传入设置信息.
driver = webdriver.Chrome(chrome_options=chrome_opt)        
# 操作这个对象.
driver.get('https://www.baidu.com')     # get方式访问百度.
time.sleep(2)
print(driver.page_source)       # 打印加载的page code, 证明(prove) program is right.
driver.quit()   # 使用完, 记得关闭浏览器, 不然chromedriver.exe进程为一直在内存中.

Selenium启动项(参数设置)与Driver

Chrome WebDriver Options

Easy EG

#!/usr/bin/env python3
from selenium import webdriver
from selenium.webdriver.chrome.options import Options


chrome_opt = Options()      # 创建参数设置对象.
chrome_opt.add_argument('--windows-size=1366,768')  # 设置浏览器窗口大小.

# 创建chrome对象并传入设置信息.
driver = webdriver.Chrome(chrome_options=chrome_opt)
driver.quit()

常用的启动项

启动参数作用
–user-agent=”“设置请求头的User-Agent
–window-size=长,宽设置浏览器分辨率
–headless无界面运行
–start-maximized最大化运行
–incognito隐身模式
–disable-javascript禁用javascript
–disable-infobars禁用浏览器正在被自动化程序控制的提示

详细的参数解释: https://peter.sh/experiments/chromium-command-line-switches/

禁用图片加载

Chrome的禁用图片加载参数设置比较复杂,如下所示:

prefs = {
    'profile.default_content_setting_values' : {
        'images' : 2
    }
}
options.add_experimental_option('prefs',prefs)
禁用浏览器弹窗

使用浏览器时常常会有弹窗弹出,以下选项可以禁止弹窗:

prefs = {  
    'profile.default_content_setting_values' :  {  
        'notifications' : 2  
     }  
}  
options.add_experimental_option('prefs',prefs) 

Chrome WebDriver

chromedriver.exe一般可以放在环境文件中,但是有时候为了方便部署项目,或者为了容易打包,我们可以将chromedriver.exe放到我们的项目目录中,然后在初始化Chrome Webdriver对象时,传入chromedriver.exe的路径。

from selenium import webdriver


driver = webdriver.Chrome(executable_path='chromedriver.exe')
driver.quit()

Selenium Driver操作

Driver对象常见操作

  • get(url): 在当前浏览器会话中访问传入的url地址, driver.get('https://www.baidu.com').

  • close(): 关闭浏览器当前窗口。

  • quit(): 退出webdriver并关闭所有窗口。

  • refresh(): 刷新当前页面。

  • title: 获取当前页的标题。

  • page_source: 获取当前页渲染后的源代码。

  • current_url: 获取当前页面的url。

  • window_handles: 获取当前会话中所有窗口的句柄。

Driver查找单个元素

方法作用
find_element_by_xpath()通过Xpath查找
find_element_by_class_name()通过class属性查找
find_element_by_css_selector()通过css选择器查找
find_element_by_id()通过id查找
find_element_by_link_text()通过链接文本查找
find_element_by_name()通过name属性进行查找
find_element_by_partial_link_text()通过链接文本的部分匹配查找
find_element_by_tag_name()通过标签名查找

查找后返回的是一个Webelement对象。

查找多个元素: 将其中的element加上一个s,则是对应的多个查找方法。

上面的方法都是将第一个找到的元素进行返回,而将所有匹配的元素进行返回使用的是find_elements_by_*方法。

Driver操作Cookie

  • add_cookie(cookie_dict) : 给当前会话添加一个cookie。

    • cookie_dict: 一个字典对象,必须要有”name”和”value”两个键,可选的键有:“path”, “domain”, “secure”, “expiry” 。

    • 用法:

    driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’})
    driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’})
    driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’, ‘secure’:True})
  • get_cookie(name): 按name获取单个Cookie,没有则返回None。

  • get_cookies(): 获取所有Cookie,返回的是一组字典。

  • delete_all_cookies(): 删除所有Cookies。

  • delete_cookie(name): 按name删除指定cookie。

Driver获取截屏

  • get_screenshot_as_base64(): 获取当前窗口的截图保存为一个base64编码的字符串。
  • get_screenshot_as_file(filename): 获取当前窗口的截图保存为一个png格式的图片,filename参数为图片的保存地址,最后应该以.png结尾。如果出现IO错误,则返回False。
    • 用法: driver.get_screenshot_as_file(‘/Screenshots/foo.png’)
  • get_screenshot_as_png(): 获取当前窗口的截图保存为一个png格式的二进制字符串。

Driver获取窗口信息

  • get_window_position(windowHandle=’current’): 获取当前窗口的x,y坐标。

  • get_window_rect(): 获取当前窗口的x,y坐标和当前窗口的高度和宽度。

  • get_window_size(windowHandle=’current’): 获取当前窗口的高度和宽度。

Driver切换操作

  • switch_to_frame(frame_reference): 将焦点切换到指定的子框架中

  • switch_to_window(window_name): 切换窗口

Driver执行JS代码

  • execute_async_script(script, *args) : 在当前的window/frame中异步执行JS代码。

    • script:是你要执行的JS代码。
    • *args:是你的JS代码执行要传入的参数。
    • 用法:
    script = “var callback = arguments[arguments.length - 1]; ”
    script2 = “window.setTimeout(function(){ callback(‘timeout’) }, 3000);” 
    driver.execute_async_script(script + script2)
  • execute_script(script, *args): 在当前的window/frame中同步执行JS代码。

    • script:是你要执行的JS代码。
    • *args:是你的JS代码执行要传入的参数。

Selenium Webelement操作

Webelement操作

前面有讲到使用find等方法来查找单个或多个元素对象, 其结果返回一个Webelement对象.

现在我们操作这个对象.

Webelement常用方法
  • clear(): 清空对象中的内容.
  • click(): 单击对象.
  • get_attribute(name): 优先返回完全匹配属性名的值,如果不存在,则返回属性名中包含name的值。
  • screenshot(filename): 获取当前元素的截图,保存为png,最好用绝对路径.
  • send_keys(value): 给对象元素输入数据, 如在百度中搜索’哔哩哔哩’.
  • submit(): 提交表单.
Webelement常用属性
  • text: 获取当前元素的文本内容.
  • tag_name: 获取当前元素的标签名.
  • size: 获取当前元素的大小.
  • screenshot_as_png: 将当前元素截屏并保存为png格式的二进制数据.
  • screenshot_as_base64: 将当前元素截屏并保存为base64编码的字符串.
  • rect: 获取一个包含当前元素大小和位置的字典.
  • parent: 获取当前元素的父节点.
  • location: 当前元素的位置.
  • id: 当前元素的id值,主要用来selenium内部使用,可以用来判断两个元素是否是同一个元素.
Webelement中的keys

们经常需要模拟键盘的输入,当输入普通的值时,在send_keys()方法中传入要输入的字符串就好了。

但是我们有时候会用到一些特殊的按键,这时候就需要用到我们的Keys类。

EG:

# 要使用按键值, 需要导入下面keys.
from selenium.webdriver.common.keys import Keys


elem.send_keys(Keys.CONTROL, 'c')
更多的模拟键

对应的属性
ADD = u’\ue025’
ALT = u’\ue00a’
ARROW_DOWN = u’\ue015’
ARROW_LEFT = u’\ue012’
ARROW_RIGHT = u’\ue014’
ARROW_UP = u’\ue013’
BACKSPACE = u’\ue003’
BACK_SPACE = u’\ue003’
CANCEL = u’\ue001’
CLEAR = u’\ue005’
COMMAND = u’\ue03d’
CONTROL = u’\ue009’
DECIMAL = u’\ue028’
DELETE = u’\ue017’
DIVIDE = u’\ue029’
DOWN = u’\ue015’
END = u’\ue010’
ENTER = u’\ue007’
EQUALS = u’\ue019’
ESCAPE = u’\ue00c’
F1 = u’\ue031’
F2 = u’\ue032’
F3 = u’\ue033’
F4 = u’\ue034’
F5 = u’\ue035’
F6 = u’\ue036’
F7 = u’\ue037’
F8 = u’\ue038’
F9 = u’\ue039’
F10 = u’\ue03a’
F11 = u’\ue03b’
F12 = u’\ue03c’
HELP = u’\ue002’
HOME = u’\ue011’
INSERT = u’\ue016’
LEFT = u’\ue012’
LEFT_ALT = u’\ue00a’
LEFT_CONTROL = u’\ue009’
LEFT_SHIFT = u’\ue008’
META = u’\ue03d’
MULTIPLY = u’\ue024’
NULL = u’\ue000’
NUMPAD0 = u’\ue01a’
NUMPAD1 = u’\ue01b’
NUMPAD2 = u’\ue01c’
NUMPAD3 = u’\ue01d’
NUMPAD4 = u’\ue01e’
NUMPAD5 = u’\ue01f’
NUMPAD6 = u’\ue020’
NUMPAD7 = u’\ue021’
NUMPAD8 = u’\ue022’
NUMPAD9 = u’\ue023’
PAGE_DOWN = u’\ue00f’
PAGE_UP = u’\ue00e’
PAUSE = u’\ue00b’
RETURN = u’\ue006’
RIGHT = u’\ue014’
SEMICOLON = u’\ue018’
SEPARATOR = u’\ue026’
SHIFT = u’\ue008’
SPACE = u’\ue00d’
SUBTRACT = u’\ue027’
TAB = u’\ue004’
UP = u’\ue013’

Selenium Action-Chains

What is the Action-Chains?

一般来说我们与页面的交互可以使用Webelement的方法来进行点击等操作。但是,有时候我们需要一些更复杂的动作,类似于拖动,双击,长按等等。

这时候就需要用到我们的Action Chains(动作链)了。

EG
from selenium.webdriver import ActionChains
from selenium import webdriver

driver = webdriver.Chrome()     # 创建webdriver对象.

element = driver.find_element_by_name("source")     # 查找单一元素对象.
target = driver.find_element_by_name("target")      # 同上.

actions = ActionChains(driver)      # 创建动作链对象.

# 在element元素上点击抓起,移动到target元素上松开放下。 类似鼠标.
actions.drag_and_drop(element, target)
actions.perform()   # 执行动作.

在导入动作链模块以后,需要声明一个动作链对象,在声明时将webdriver对象当作参数传入,并将对象赋值给一个actions变量。

然后我们通过这个actions变量,调用其内部附带的各种动作方法进行操作。

注:在调用各种动作方法后,这些方法并不会马上执行,而是会按你代码的顺序存储在ActionChains对象的队列中。当你调用perform()时,这些动作才会依次开始执行。

常用的Action-Chains方法

  • click(on_element=None) : 左键单击传入的元素,如果不传入的话,点击鼠标当前位置。
  • context_click(on_element=None): 右键单击。
  • double_click(on_element=None) : 双击。
  • click_and_hold(on_element=None): 点击并抓起
  • drag_and_drop(source, target) : 在source元素上点击抓起,移动到target元素上松开放下。
  • drag_and_drop_by_offset(source, xoffset, yoffset):在source元素上点击抓起,移动到相对于source元素偏移xoffset和yoffset的坐标位置放下。
  • send_keys(*keys_to_send): 将键发送到当前聚焦的元素。
  • send_keys_to_element(element, *keys_to_send): 将键发送到指定的元素。
  • reset_actions(): 清除已经存储的动作。

Selenium Wait

为什么需要等待?

在selenium操作浏览器的过程中,每一次请求url,selenium都会等待页面加载完毕以后,才会将操作权限再次交给我们的程序。

但是,由于ajax和各种JS代码的异步加载问题,所以我们在使用selenium的时候常常会遇到操作的元素还没有加载出来,就会引发报错。为了解决这个问题,Selenium提供了几种等待的方法,让我们可以等待元素加载完毕后,再进行操作。

eg: 显式等待.
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("http://somedomain/url_that_delays_loading")

try:
    # 创建wait对象.
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )

finally:
    driver.quit()

在这个例子中,我们在查找一个元素的时候,不再使用find_element_by_*这样的方式来查找元素,而是使用了WebDriverWait。

try代码块中的代码的意思是:在抛出元素不存在异常之前,最多等待10秒。在这10秒中,WebDriverWait会默认每500ms运行一次until之中的内容,而until中的EC.presence_of_element_located则是检查元素是否已经被加载,检查的元素则通过By.ID这样的方式来进行查找。

就是说,在10秒内,默认每0.5秒检查一次元素是否存在,存在则将元素赋值给element这个变量。如果超过10秒这个元素仍不存在,则抛出超时异常。

eg: 隐式等待.

隐式等待指的是,在webdriver中进行find_element这一类查找操作时,如果找不到元素,则会默认的轮询等待一段时间。

这个值默认是0,可以通过以下方式进行设置:

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10) # 单位是秒
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")

Expected Conditions方法

方法解释引用: https://www.cnblogs.com/yuuwee/p/6635652.html

Expected Conditions这个类提供了很多种常见的检查条件可以供我们使用。

  • title_is: 判断title,返回布尔值.
    • WebDriverWait(driver,10).until(EC.title_is(u"百度一下,你就知道"))
  • title_contains: 判断title,返回布尔值.
    • WebDriverWait(driver,10).until(EC.title_contains(u"百度一下"))
  • presence_of_element_located: 判断元素对象是否被加载到dom树里; 并不代表该元素一定可见, 如果定位到就返回Webelement.
    • WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'some')))
  • visibility_of_element_located: 判断元素对象是否被加载到dom里并且可见, 一般在对象可能会被其他元素对象遮挡的情况下使用.
    • WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,'some')))
  • visibility_of: 判断元素是否可见,如果可见就返回这个元素.
    • WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(by=By.ID,value='some')))
  • presence_of_all_elements_located: 判断是否至少有1个元素存在dom树中,如果定位(找)到就返回列表.
    • WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'some')))
  • visibility_of_any_elements_located: 判断是否至少有一个元素在页面中可见,如果定位到就返回列表.
    • WebDriverWait(driver,10).until(EC.visibility_of_any_elements_located((By.CSS_SELECTOR,'some')))
  • text_to_be_present_in_element: 判断指定的元素中是否包含了预期的字符串,返回布尔值.
    • WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.XPATH,"some"),u'设置'))
  • text_to_be_present_in_element_value: 判断指定元素的属性值中是否包含了预期的字符串,返回布尔值.
    • WebDriverWait(driver,10).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR,'some'),u'百度一下'))
  • frame_to_be_available_and_switch_to_it: 判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False.
    • WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it(some))
  • invisibility_of_element_located: 判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素.
    • WebDriverWait(driver,10).until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'some')))
  • element_to_be_clickable: 判断某个元素中是否有可见并且是enable(可点击)的.
    • WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"some"))).click()
  • staleness_of: 等待某个元素从dom树中移除.
    • WebDriverWait(driver,10).until(EC.staleness_of(driver.find_element(By.ID,'some')))
  • element_to_be_selected: 判断某个元素是否被选中了,一般用在下拉列表.
    • WebDriverWait(driver,10).until(EC.element_to_be_selected(driver.find_element(By.XPATH,"some")))
  • element_located_to_be_selected: 判断元素是否被选中, 传入一个元组对象.
    • 暂没找到例子.
  • element_selection_state_to_be: 判断某个元素的选中状态是否符合预期.
    • WebDriverWait(driver,10).until(EC.element_selection_state_to_be(driver.find_element(By.XPATH,"some"),True))
  • element_located_selection_state_to_be: 判断某个元素的选中状态是否符合预期.
    • WebDriverWait(driver,10).until(EC.element_located_selection_state_to_be((By.XPATH,"some"),True))
  • alert_is_present: 判断页面上是否存在alert(Js弹窗),如果有就切换到alert并返回alert的内容.
    • WebDriverWait(driver,10).until(EC.alert_is_present())
EG
'''
    示意代码, 不完整.
'''
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By


driver = webdriver.Chrome()

wait = WebDriverWait(driver, 10)
# 等待直到元素可以被点击
element = wait.until(EC.element_to_be_clickable((By.ID, 'someid')))

Selenium 异常处理

pass

Python+Selenium安装及环境配置手把手教会你 1. 1,组件✨Selenium IDE,Firefox浏览器的一个插件,提供简单的脚本录制、编辑与回放功能;Selenium Remote Control (RC),是selenium 1 提供的组件,包含:SeleniumServer(用于提供自动化测试服务)、Selenium Client(用于执行脚本);Selenium Grid,用于对测试用例集做分布式处理(并行),现已集成到selenium server中; 阅读详情

相关推荐

python+selenium,详解selenium原理。

鉴于很多同学对原理都处于懵逼状态,那么就仔细阅读这篇文章然后自己去体会。 1.在之前学过的接口测试里面我们事如何做接口测试的? 首先是python请求了一个接口地址,发送对应的参数,然后拿到服务器给我们的返回值。那有人肯定不知道这个服务器为什么会给我们返回值? 拓展下: 当你拿着一个地址去请求后端服务器的时候,实际上是去调用后端程序员哥哥写的一个函数,每一个地址(地址实际上是后端程序员哥哥设置的不...

Snow_python的博客 2236

基于Python的Selenium详细教程

这篇文章是 Selenium 的使用教程。先介绍在 Windows 11、Python 3.10.5、PyCharm 2022.1.3 环境下,安装 Selenium 4.3.0 及配置浏览器驱动的方法,并给出验证步骤。接着详细讲解 Selenium 的使用,包括元素定位、文本操作、获取页面内容、等待方式、窗口及框架处理,还有鼠标、键盘操作,以及执行 JS 代码、截图等,助力读者掌握 Selenium 在 Web 自动化方面的应用。

Smile的博客 6万+

python selenium爬虫实例_python使用selenium爬虫知乎的方法示例

说起爬虫一般想到的情况是,使用 python 中都通过 requests 库获取网页内容,然后通过 beautifulSoup 进行筛选文档中的标签和内容。但是这样有个问题就是,容易被反扒机制所拦住。反扒机制有很多种,例如知乎:刚开始只加载几个问题,当你往下滚动时才会继续往下面加载,而且在往下滚动一段距离时就会出来一个登陆的弹框。这样的机制对于通过获取服务器返回内容的爬虫方式进行了限制,我们只能获...

weixin_30750081的博客 990

Python爬虫基础之Selenium详解

围绕 Selenium 库展开讲解如何使用自动化工具操作浏览器。

程序园@大Null 2万+

使用Python安装Selenium

本文介绍了如何在Python中安装Selenium,并提供了一个简单的示例代码。安装Selenium后,你可以使用它来自动化浏览器操作,进行自动化测试、数据抓取等任务。记得根据你使用的浏览器下载相应的驱动程序,并将其添加到系统的环境变量中,以便Selenium能够正常使用。安装Python之后,我们可以使用Python的包管理工具pip来安装Selenium。根据你使用的浏览器,选择对应的驱动程序。下载完驱动程序后,将驱动程序的路径添加到系统的环境变量中,这样Selenium才能找到并使用它。

WELL_CODER的博客 1872

为什么你的Mac蓝牙总断连?深入解析硬件干扰与系统设置避坑

本文深入解析Mac蓝牙频繁断连的原因,包括硬件干扰(如WiFi同频干扰、USB设备电磁干扰)和系统设置问题,并提供详细的优化方案和诊断工具(如blueutil)使用指南,帮助用户有效解决蓝牙稳定性问题。

ik67890123的博客 680

Python爬虫:selenium

Python爬虫之selenium

mengnf的专栏 2万+

FCKeditor 2.6.4 php版本任意文件上传——漏洞复现

一、漏洞描述 FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行,互联网上很容易找到相关技术文档,国内许多Web项目和大型网站均采用了FCKeditor。 Fckeditor 低于 2.6.4 php 版本任意文件上传漏洞,当您的PHP环境配置为 GPC = Off 时可绕过currentfolder参数过滤上传脚本木马控制网站服务器 二、漏洞原理 漏洞版本:<=2.6.4 三、环境搭建

W小哥 1万+

Python selenium基础用法详解

Python selenium基础用法详解

醉蕤的博客 2万+

用PyCharm+Scrapy打造你的第一个爬虫:从安装到实战(附完整代码)

本文详细介绍了如何使用PyCharm和Scrapy框架从零开始构建高效网络爬虫。通过环境配置、项目创建、核心爬虫逻辑编写到数据处理与存储的完整流程,帮助Python开发者快速掌握爬虫开发技巧,并附有实战代码示例。特别适合想要学习Scrapy框架和提升爬虫技能的开发者。

weixin_29038345的博客 868

MMRotate 详细使用教程

MMRotate 详细使用教程 做旋转目标检测,怎么可以不知道如何使用MMRotate呢! github链接: https://github.com/open-mmlab/mmrotate 1 安装 创建虚拟环境并激活 conda create -n mmrotate python=3.7 -y conda activate mmrotate 安装 PyTorch 和 torchvision conda install pytorch torchvision -c pytorch 注意:确保

Sylvia_Lan的博客 1万+

Python中Selenium的使用

目录 Selenium简介 安装Selenium-Python Selenium-Server的安装与使用 Selenium常用操作 请求一个页面 查找元素 填写表格 拖放 在不同的窗口和框架之间移动 访问浏览器历史记录 操作Cookies 等待页面加载完成 显式等待 隐式等待 页面对象 python_test.py page.py element.py ...

pengjunlee的博客 3万+

SAP MM 物料描述MAKTX 40个字符不够用的问题处理

SAP物料描述表,长度40个字符一般情况下,40个字符在描述中也够用了,但是要加上规格之类的额外描述就不一定了,特别是对于辅助件-刀具。解决方案一:对maktx增强,换成CHAR80或者CHAR100的,但是风险较大,涉及到好多地方,另外SAP+ 算号器 也不支持。解决方案二:增强字段。内部顾问,建议在 那就在这里加一个字段,具体过程如下:1、创建域2、创建架构3、附加架构4、GUI 设置 5、后台设置6、MASS/MM17字段新增。过程1、创建域 SE112、创建结构 se11 3、MARA附加架构

GAVIN 4728

python爬虫——Selenium的基本使用

Selenium是一个非常强大的自动化测试工具,它支持多种编程语言,如Java、Python、C#等。Selenium可以模拟用户在浏览器中的行为,比如点击、输入、滚动等,从而实现对网页的自动化测试。本文将简要介绍在python中Selenium的基本使用方法。

qq_73291520的博客 3618

知识图谱构建中的数据清洗:AI原生应用高质量图谱的前提

数据清洗是知识图谱构建的核心前置环节,直接决定AI原生应用(如智能问答、个性化推荐、决策支持系统)的图谱质量与应用效能。本文以第一性原理为起点,系统解析数据清洗的理论框架、技术架构与工程实践,覆盖从多源异构数据的噪声检测到高质量知识三元组(实体-关系-实体)生成的全流程。通过层次化概念映射(专家→中级→入门)、数学形式化建模及工业级案例分析,揭示数据清洗在解决实体歧义、关系冲突、结构不一致等关键问题中的技术逻辑,并展望基于大模型的智能清洗范式演化。Completeness(完整性)

移动开发前沿的博客 404

npm install 时出现npm error code ENOTFOUND和npm error network request to https://registry.npmjs.org的解决方案

本文主要介绍了npm install 时出现npm error code ENOTFOUND和npm error network request to https://registry.npmjs.org 的解决方案,希望能对使用npm的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 6万+

python调用selenium_如何在python中使用selenium

最近基于selenium写了一个python小工具,记录下学习记录,自己运行的环境是Ubuntu 14.04.4, Python 2.7,Chromium 49.0,ChromeDriver 2.16selenium简介selenium提供了一个通用的接口,可模拟用户来操作浏览器,比如用于自动化测试等.selenium的核心是WebDriver,它提供了一组接口,这些接口能够操作各种跨平台的浏览器...

weixin_28707535的博客 548

华为数字化转型之道 方法篇 第五章 视IT为投资,用产品思维管理IT

比较传统信息化和数字化转型下的IT系统特征,我们发现业务环境、IT能力、业务和IT的关系都发生了巨大的变化(见图5-1)从“管理系统”到“作业平台”。企业通常的做法是将线下的文档、流程线上化,IT系统是作为管理系统而存在的。而面向数字化,企业的业务作业、业务运营和决策、团队协同等业务动作已经和IT系统集成,IT系统逐步转变为作业系统。从“功能优先”到“体验优先”,如果要整体完成一项工作往往需要用户在不同系统间切换,费时费力。

沧海之巅的专栏 1093

selenium使用代理IP_python selenium4 使用代理

Win64;ops.add_argument(‘–proxy-server=http://%s’ % a) #添加代理driver = webdriver.Chrome(r’D:\360安全浏览器下载\chromedriver.exe’)api_url = ‘让你复制的代理api链接’a = driver.find_element_by_xpath(‘/html/body/pre’).text # 获取代理。

m0_60607371的博客 1616

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

selenium python实例_如何在python中使用selenium的示例

最近基于selenium写了一个python小工具,记录下学习记录,自己运行的环境是Ubuntu 14.04.4, Python 2.7,Chromium 49.0,ChromeDriver 2.16selenium简介selenium提供了一个通用的接口,可模拟用户来操作浏览器,比如用于自动化测试等.selenium的核心是WebDriver,它提供了一组接口,这些接口能够操作各种跨平台的浏览器...

weixin_39849239的博客 265

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

python3 selenium_python3 selenium使用

其实这个就相当于模拟人的点击事件来连续的访问浏览器。如果你玩过王者荣耀的话在2016年一月份的版本里面就有一个bug。安卓手机下载一个按键精灵就可以在冒险模式里面设置按键,让手机自动玩闯关,一局19个金币,一晚上就一个英雄了。不过程序员也不是吃素的。给一个星期设置了大概4000金币上限。有兴趣的可以去试试。(注:手机需要root)进入正题:from selenium importwebdriver...

weixin_39964869的博客 189

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

python使用selenium_如何在python中使用selenium的示例

最近基于selenium写了一个python小工具,记录下学习记录,自己运行的环境是Ubuntu 14.04.4, Python 2.7,Chromium 49.0,ChromeDriver 2.16selenium简介selenium提供了一个通用的接口,可模拟用户来操作浏览器,比如用于自动化测试等.selenium的核心是WebDriver,它提供了一组接口,这些接口能够操作各种跨平台的浏览器...

weixin_35009537的博客 156

python怎么装selenium?python装selenium教程

在 Python 中安装 Selenium 是一个相对简单的过程。以下是安装 Selenium 的步骤:确保 Python 已安装: 首先,你需要确保你的计算机上已经安装了 Python。你可以在命令行中输入 python --version 来检查是否已安装 Python。安装 pip:pip 是 Python 的包管理...

weixin_32252533的博客 407

python selenium下载_Python Selenium安装下载

本篇讲解Python Selenium如何安装,下载。本篇已假定你已经熟悉Python,并且已安装好Python和pip。本篇及以后篇幅所讲代码都调试运行在Python3.6版本上通过。Python selenium安装两种安装方法,第一种方法最方便,使用pip安装。windows用户在命令提示符下执行如下命令:pip install seleniumlinux用户你肯定知道怎么运行这个命令的。安...

weixin_39622760的博客 1125
上一篇: python中的urlretrieve
下一篇: python中any,all函数
One of them
博客等级 码龄9年 96粉丝 62原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值