selenium操作

news/2024/7/7 20:42:16/文章来源:https://www.cnblogs.com/JJJHaoran/p/18284936

selenium介绍

  开发使用有头浏览器,部署使用无界面浏览器

selenium工作原理

  利用浏览器原生的API,封装成一套更加面向对象的Selenium WebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的)

selenium模块与driver的安装

  • 安装 Selenium 模块
pip install selenium
  • 下载浏览器驱动

  Selenium 需要一个浏览器驱动程序来与浏览器进行通信。以下是一些常用浏览器的驱动程序下载地址:

ChromeDriver(用于 Google Chrome): ChromeDriver 下载链接

 

EdgeDriver用于 Microsoft Edge): EdgeDriver 下载链接

下载合适的驱动程序后,将其解压并放置在你的系统 PATH 中,或者记下其路径以便稍后使用。

  • 设置并启动浏览器

  安装好 Selenium 模块和浏览器驱动后,可以编写脚本来启动浏览器。以下是一个简单的示例,展示如何使用 ChromeDriver 启动 Chrome 浏览器:

 

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys# 指定 ChromeDriver 的路径(如果不在系统 PATH 中)
driver_path = 'path/to/chromedriver'# 初始化 Chrome 浏览器
driver = webdriver.Chrome(executable_path=driver_path)# 访问一个网站
driver.get('http://www.google.com')# 查找搜索框元素,并输入一些文本
search_box = driver.find_element(By.NAME, 'q')
search_box.send_keys('Selenium')
search_box.send_keys(Keys.RETURN)# 关闭浏览器
driver.quit()
  • 添加驱动路径到系统 PATH(可选)

  如果不想每次都指定驱动路径,可以将驱动程序的路径添加到系统 PATH 中:

  Windows

  1. 右键点击“此电脑”,选择“属性”。
  2. 点击“高级系统设置”。
  3. 点击“环境变量”。
  4. 在“系统变量”中,找到 Path,并点击“编辑”。
  5. 点击“新建”,并输入驱动程序的路径。
  6. 确认并保存所有对话框。

 

driver属性和方法

属性

属性描述示例
current_url 获取当前页面的 URL url = driver.current_url
title 获取当前页面的标题 title = driver.title
page_source 获取当前页面的源代码 page_source = driver.page_source
current_window_handle 获取当前窗口的句柄 current_window = driver.current_window_handle
window_handles 获取所有打开窗口的句柄 windows = driver.window_handles

方法

方法描述示例
get(url) 打开指定的 URL driver.get('http://www.example.com')
find_element(by, value) 查找单个元素 element = driver.find_element(By.ID, 'element_id')
find_elements(by, value) 查找多个元素 elements = driver.find_elements(By.CLASS_NAME, 'element_class')
close() 关闭当前窗口 driver.close()
quit() 关闭所有窗口并退出浏览器 driver.quit()
back() 导航到浏览器历史记录中的前一个页面 driver.back()
forward() 导航到浏览器历史记录中的下一个页面 driver.forward()
refresh() 刷新当前页面 driver.refresh()
execute_script(script, *args) 在当前页面上执行 JavaScript driver.execute_script("alert('Hello World!');")
get_screenshot_as_file(filename) 截取当前页面的截图并保存到文件中 driver.get_screenshot_as_file('screenshot.png')
switch_to 切换到不同的上下文(如 iframe 或窗口) driver.switch_to.frame('frame_name')<br>driver.swit

 

元素定位

定位方式

定位方式描述示例
By.ID 通过元素的 id 属性定位 element = driver.find_element(By.ID, 'element_id')
By.NAME 通过元素的 name 属性定位 element = driver.find_element(By.NAME, 'element_name')
By.CLASS_NAME 通过元素的 class 属性定位 element = driver.find_element(By.CLASS_NAME, 'class_name')
By.TAG_NAME 通过元素的标签名定位 element = driver.find_element(By.TAG_NAME, 'tag_name')
By.LINK_TEXT 通过元素的链接文本定位 element = driver.find_element(By.LINK_TEXT, 'link_text')
By.PARTIAL_LINK_TEXT 通过元素的部分链接文本定位 element = driver.find_element(By.PARTIAL_LINK_TEXT, 'partial_text')
By.CSS_SELECTOR 通过 CSS 选择器定位元素 element = driver.find_element(By.CSS_SELECTOR, 'css_selector')
By.XPATH 通过 XPath 表达式定位元素 element = driver.find_element(By.XPATH, 'xpath_expression')

示例代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keysdriver_path = 'path/to/chromedriver'
driver = webdriver.Chrome(executable_path=driver_path)# 打开 Google
driver.get('http://www.google.com')# 通过 ID 定位
search_box_by_id = driver.find_element(By.ID, 'lst-ib')# 通过 Name 定位
search_box_by_name = driver.find_element(By.NAME, 'q')# 通过 Class Name 定位
search_box_by_class_name = driver.find_element(By.CLASS_NAME, 'gsfi')# 通过 Tag Name 定位
input_elements_by_tag_name = driver.find_elements(By.TAG_NAME, 'input')# 通过 Link Text 定位
link_by_text = driver.find_element(By.LINK_TEXT, 'About')# 通过 Partial Link Text 定位
link_by_partial_text = driver.find_element(By.PARTIAL_LINK_TEXT, 'Abo')# 通过 CSS Selector 定位
search_box_by_css_selector = driver.find_element(By.CSS_SELECTOR, 'input[name="q"]')# 通过 XPath 定位
search_box_by_xpath = driver.find_element(By.XPATH, '//input[@name="q"]')# 输入搜索关键字
search_box_by_name.send_keys('Selenium')
search_box_by_name.send_keys(Keys.RETURN)# 关闭浏览器
driver.quit()

 

定位多个元素

有时需要定位页面上的多个元素,使用 find_elements 方法:

# 定位所有的输入框
input_boxes = driver.find_elements(By.TAG_NAME, 'input')for box in input_boxes:print(box.get_attribute('name'))

元素操作

常见操作

操作描述示例
click() 点击元素 element.click()
send_keys(*value) 向元素发送文本或键盘输入 element.send_keys('text')
clear() 清除元素中的内容(通常用于输入框) element.clear()
submit() 提交表单(通常用于表单中的输入框或按钮) element.submit()
get_attribute(name) 获取元素的属性值 value = element.get_attribute('attribute_name')
get_property(name) 获取元素的属性值(区别于 get_attribute value = element.get_property('property_name')
text 获取元素的文本内容 text = element.text
is_displayed() 判断元素是否可见 is_visible = element.is_displayed()
is_enabled() 判断元素是否可用 is_enabled = element.is_enabled()
is_selected() 判断元素是否被选中(通常用于复选框或单选按钮) is_selected = element.is_selected()
screenshot(filename) 截取元素的截图并保存到文件 element.screenshot('element.png')

示例代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keysdriver_path = 'path/to/chromedriver'
driver = webdriver.Chrome(executable_path=driver_path)# 打开 Google
driver.get('http://www.google.com')# 通过 Name 定位搜索框
search_box = driver.find_element(By.NAME, 'q')# 清除搜索框中的内容
search_box.clear()# 向搜索框发送文本
search_box.send_keys('Selenium')# 模拟回车键提交搜索
search_box.send_keys(Keys.RETURN)# 等待搜索结果加载并获取第一个结果
driver.implicitly_wait(10)
first_result = driver.find_element(By.XPATH, '//h3')# 获取第一个结果的文本
result_text = first_result.text
print(result_text)# 点击第一个结果
first_result.click()# 截取当前页面截图
driver.save_screenshot('search_result.png')# 关闭浏览器
driver.quit()

标签切换

  在使用 Selenium 进行浏览器自动化时,有时需要在多个标签页(或窗口)之间切换。Selenium 提供了一些方法,可以帮助你处理这些操作。以下是关于如何在标签页之间切换的详细指南:

获取当前窗口句柄

每个窗口或标签页都有一个唯一的句柄,可以使用 driver.current_window_handle 获取当前窗口的句柄。

current_handle = driver.current_window_handle print(current_handle)

获取所有窗口句柄

可以使用 driver.window_handles 获取所有打开的窗口句柄。

handles = driver.window_handles print(handles)

切换到指定窗口

使用 driver.switch_to.window(handle) 方法可以切换到指定的窗口。

# 获取所有窗口句柄
handles = driver.window_handles# 切换到新窗口
driver.switch_to.window(handles[1])# 切换回原窗口
driver.switch_to.window(handles[0])

示例代码

以下是一个示例代码,展示如何打开一个新标签页并在标签页之间切换:

from selenium import webdriver
from selenium.webdriver.common.by import By
import timedriver_path = 'path/to/chromedriver'
driver = webdriver.Chrome(executable_path=driver_path)# 打开第一个网站
driver.get('http://www.google.com')# 获取当前窗口句柄
main_window = driver.current_window_handle# 打开一个新标签页
driver.execute_script("window.open('http://www.bing.com', '_blank');")# 等待新标签页加载
time.sleep(3)# 获取所有窗口句柄
handles = driver.window_handles# 切换到新标签页
driver.switch_to.window(handles[1])# 在新标签页中执行操作
search_box = driver.find_element(By.NAME, 'q')
search_box.send_keys('Selenium')
search_box.send_keys(u'\ue007')  # 模拟回车键# 等待搜索结果加载
time.sleep(3)# 截取新标签页的截图
driver.save_screenshot('bing_search_result.png')# 切换回原窗口
driver.switch_to.window(main_window)# 截取原窗口的截图
driver.save_screenshot('google_home.png')# 关闭浏览器
driver.quit()

关闭指定窗口

可以使用 driver.close() 关闭当前窗口,并使用 driver.quit() 关闭所有窗口。

# 切换到新窗口并关闭它
driver.switch_to.window(handles[1])
driver.close()# 切换回原窗口
driver.switch_to.window(main_window)

高级用法:处理特定窗口

有时需要根据窗口的标题或 URL 来切换到特定的窗口,可以遍历所有窗口句柄并检查每个窗口的属性:

for handle in driver.window_handles:driver.switch_to.window(handle)if "Bing" in driver.title:break# 在特定窗口执行操作
driver.save_screenshot('specific_window.png')

窗口切换

在使用 Selenium 进行浏览器自动化时,窗口切换是一个常见且重要的操作。可以在多个窗口(或标签页)之间进行切换。

基本步骤

  1. 获取当前窗口的句柄:使用 driver.current_window_handle 获取当前窗口的句柄。
  2. 获取所有窗口的句柄:使用 driver.window_handles 获取所有打开的窗口句柄。
  3. 切换到指定窗口:使用 driver.switch_to.window(handle) 方法切换到指定的窗口。
  4. 执行操作后切换回原窗口:可以在其他窗口执行操作后,切换回原来的窗口。

示例代码

以下是一个示例代码,展示如何在多个窗口之间进行切换并执行操作:

from selenium import webdriver
from selenium.webdriver.common.by import By
import timedriver_path = 'path/to/chromedriver'
driver = webdriver.Chrome(executable_path=driver_path)# 打开第一个网站
driver.get('http://www.google.com')# 获取当前窗口句柄
main_window = driver.current_window_handle
print("Main window handle:", main_window)# 打开一个新标签页
driver.execute_script("window.open('http://www.bing.com', '_blank');")# 等待新标签页加载
time.sleep(3)# 获取所有窗口句柄
handles = driver.window_handles
print("All window handles:", handles)# 切换到新标签页
for handle in handles:if handle != main_window:driver.switch_to.window(handle)break# 在新标签页中执行操作
search_box = driver.find_element(By.NAME, 'q')
search_box.send_keys('Selenium')
search_box.send_keys(u'\ue007')  # 模拟回车键# 等待搜索结果加载
time.sleep(3)# 截取新标签页的截图
driver.save_screenshot('bing_search_result.png')# 切换回原窗口
driver.switch_to.window(main_window)# 截取原窗口的截图
driver.save_screenshot('google_home.png')# 关闭浏览器
driver.quit()

关闭指定窗口

可以使用 driver.close() 关闭当前窗口,而不是关闭所有窗口。

# 切换到新窗口并关闭它
driver.switch_to.window(handles[1])
driver.close()# 切换回原窗口
driver.switch_to.window(main_window)

根据窗口属性切换

有时需要根据窗口的标题或 URL 切换到特定的窗口,可以遍历所有窗口句柄并检查每个窗口的属性:

for handle in driver.window_handles:driver.switch_to.window(handle)if "Bing" in driver.title:break# 在特定窗口执行操作
driver.save_screenshot('specific_window.png')

使用 WebDriverWait 进行等待

在实际操作中,等待新窗口加载完成是很重要的。可以使用 WebDriverWait 进行显式等待:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC# 等待新窗口打开
new_window = WebDriverWait(driver, 10).until(EC.new_window_is_opened(handles)
)# 获取所有窗口句柄
handles = driver.window_handles# 切换到新窗口
driver.switch_to.window(handles[-1])

通过这些方法,你可以在 Selenium 中灵活地处理多个窗口或标签页的操作,确保自动化脚本能够正确地在不同窗口之间切换并执行相应的任务。

cookies操作

在 Selenium 中,可以使用浏览器的 cookies 来管理会话和用户数据。以下是有关如何添加、获取、删除和清除 cookies 的详细指南及示例代码:

常用操作

操作描述示例
add_cookie(cookie_dict) 添加一个 cookie driver.add_cookie({'name': 'key', 'value': 'value'})
get_cookie(name) 获取一个 cookie cookie = driver.get_cookie('key')
get_cookies() 获取所有 cookies cookies = driver.get_cookies()
delete_cookie(name) 删除一个 cookie driver.delete_cookie('key')
delete_all_cookies() 删除所有 cookies driver.delete_all_cookies()

示例代码

以下是一些操作 cookies 的示例代码:

from selenium import webdriverdriver_path = 'path/to/chromedriver'
driver = webdriver.Chrome(executable_path=driver_path)# 打开一个网站
driver.get('http://www.example.com')# 添加一个 cookie
driver.add_cookie({'name': 'test_cookie', 'value': 'test_value'})# 获取并打印所有 cookies
cookies = driver.get_cookies()
print("All cookies:", cookies)# 获取并打印指定的 cookie
cookie = driver.get_cookie('test_cookie')
print("Specific cookie:", cookie)# 删除指定的 cookie
driver.delete_cookie('test_cookie')# 获取并打印所有 cookies
cookies = driver.get_cookies()
print("Cookies after deletion:", cookies)# 删除所有 cookies
driver.delete_all_cookies()# 获取并打印所有 cookies
cookies = driver.get_cookies()
print("Cookies after clearing:", cookies)# 关闭浏览器
driver.quit()

高级操作示例

有时可能需要在浏览器启动之前设置 cookies。以下是一个示例,展示如何在浏览器启动之前加载 cookies:

from selenium import webdriver# 设置启动选项
options = webdriver.ChromeOptions()# 启动 Chrome
driver_path = 'path/to/chromedriver'
driver = webdriver.Chrome(executable_path=driver_path, options=options)# 打开一个网站以初始化会话
driver.get('http://www.example.com')# 添加 cookies
cookies = [{'name': 'cookie1', 'value': 'value1'},{'name': 'cookie2', 'value': 'value2'}
]for cookie in cookies:driver.add_cookie(cookie)# 刷新页面以应用 cookies
driver.refresh()# 获取并打印所有 cookies
all_cookies = driver.get_cookies()
print("Cookies after adding:", all_cookies)# 关闭浏览器
driver.quit()

通过这些方法,可以灵活地管理 Selenium 中的 cookies,确保自动化脚本能够正确处理会话和用户数据。

执行js

在 Selenium 中,你可以使用 execute_script 方法来执行 JavaScript 代码。这个方法非常强大,可以用来执行任意的 JavaScript 代码,并与网页元素进行交互。以下是一些常见的使用场景和示例代码:

基本用法

execute_script(script, *args) 方法执行 JavaScript 代码,其中 script 是要执行的 JavaScript 代码,*args 是传递给脚本的参数。

示例代码

以下是一些常见的使用示例:

1. 执行简单的 JavaScript 代码

from selenium import webdriverdriver_path = 'path/to/chromedriver'
driver = webdriver.Chrome(executable_path=driver_path)# 打开一个网站
driver.get('http://www.example.com')# 执行简单的 JavaScript 代码
driver.execute_script("alert('Hello, world!');")# 等待用户关闭 alert 弹窗
driver.switch_to.alert.accept()# 关闭浏览器
driver.quit()

2. 获取网页标题

title = driver.execute_script("return document.title;")
print("Page title is:", title)

3. 滚动页面

# 滚动到页面底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")# 滚动到页面顶部
driver.execute_script("window.scrollTo(0, 0);")

4. 操作元素

# 查找元素并隐藏
element = driver.find_element(By.ID, 'element_id')
driver.execute_script("arguments[0].style.display = 'none';", element)# 查找元素并修改其内容
element = driver.find_element(By.ID, 'element_id')
driver.execute_script("arguments[0].innerText = 'New text';", element)

5. 获取元素属性

element = driver.find_element(By.ID, 'element_id')
value = driver.execute_script("return arguments[0].getAttribute('value');", element)
print("Element value is:", value)

6. 传递参数给 JavaScript

result = driver.execute_script("return arguments[0] + arguments[1];", 10, 20)
print("Result is:", result)

综合示例

以下是一个综合示例,展示了如何使用 execute_script 方法来执行各种操作:

from selenium import webdriver
from selenium.webdriver.common.by import By
import timedriver_path = 'path/to/chromedriver'
driver = webdriver.Chrome(executable_path=driver_path)# 打开一个网站
driver.get('http://www.example.com')# 获取页面标题
title = driver.execute_script("return document.title;")
print("Page title is:", title)# 滚动到页面底部
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)# 滚动到页面顶部
driver.execute_script("window.scrollTo(0, 0);")
time.sleep(2)# 修改元素内容
element = driver.find_element(By.ID, 'element_id')
driver.execute_script("arguments[0].innerText = 'New text';", element)# 隐藏元素
driver.execute_script("arguments[0].style.display = 'none';", element)# 显示一个 alert
driver.execute_script("alert('Script executed successfully!');")# 等待用户关闭 alert 弹窗
driver.switch_to.alert.accept()# 关闭浏览器
driver.quit()

页面等待

在使用 Selenium 进行浏览器自动化时,页面等待是一个重要的概念。它可以确保网页加载完成或特定元素出现后再继续执行操作,从而避免脚本运行错误或失败。Selenium 提供了三种主要的等待机制:隐式等待、显式等待和自定义等待。

隐式等待

隐式等待会设置一个全局的等待时间。在查找元素时,如果元素立即不可用,Selenium 会在指定的时间内不断地尝试查找,直到超时。

from selenium import webdriverdriver_path = 'path/to/chromedriver'
driver = webdriver.Chrome(executable_path=driver_path)# 设置隐式等待时间为10秒
driver.implicitly_wait(10)driver.get('http://www.example.com')# 查找元素
element = driver.find_element(By.ID, 'element_id')# 关闭浏览器
driver.quit()

显式等待

显式等待会在指定条件满足时继续执行。如果条件在超时时间内没有满足,则会抛出超时异常。常用的显式等待条件包括元素可见、元素可点击、元素存在等。

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 ECdriver_path = 'path/to/chromedriver'
driver = webdriver.Chrome(executable_path=driver_path)driver.get('http://www.example.com')# 显式等待,等待指定元素出现,最长等待时间为10秒
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'element_id'))
)# 继续进行后续操作
element.click()# 关闭浏览器
driver.quit()

自定义等待

有时可能需要自定义等待条件,可以通过编写自定义的等待函数来实现。

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 ECdriver_path = 'path/to/chromedriver'
driver = webdriver.Chrome(executable_path=driver_path)driver.get('http://www.example.com')# 自定义等待函数,等待页面加载完成
def wait_for_page_load(driver):WebDriverWait(driver, 10).until(lambda d: d.execute_script('return document.readyState') == 'complete')wait_for_page_load(driver)# 查找元素
element = driver.find_element(By.ID, 'element_id')# 关闭浏览器
driver.quit()

综合示例

以下是一个综合示例,展示如何结合使用隐式等待和显式等待来确保页面加载和元素可用:

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 ECdriver_path = 'path/to/chromedriver'
driver = webdriver.Chrome(executable_path=driver_path)# 设置隐式等待时间为10秒
driver.implicitly_wait(10)driver.get('http://www.example.com')# 显式等待,等待指定元素可见
element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, 'element_id'))
)# 继续进行后续操作
element.click()# 自定义等待,等待页面加载完成
def wait_for_page_load(driver):WebDriverWait(driver, 10).until(lambda d: d.execute_script('return document.readyState') == 'complete')wait_for_page_load(driver)# 关闭浏览器
driver.quit()

通过这些等待机制,你可以确保在页面完全加载或元素可用之后再执行后续操作,从而提高自动化脚本的稳定性和可靠性。

配置对象

在 Selenium 中,可以通过配置浏览器选项对象来开启无界面模式和使用代理 IP。以下是详细的步骤和示例代码。

开启无界面模式

无界面模式(headless mode)允许你在没有图形界面的环境中运行浏览器。这在服务器环境中非常有用。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options# 实例化配置对象
chrome_options = Options()# 配置对象添加开启无界面模式的命令
chrome_options.add_argument("--headless")# 配置对象添加禁用GPU命令
chrome_options.add_argument("--disable-gpu")# 实例化带有配置对象的driver对象
driver = webdriver.Chrome(options=chrome_options)# 打开一个网站
driver.get('http://www.example.com')# 截取屏幕截图
driver.save_screenshot('example.png')# 关闭浏览器
driver.quit()

使用代理 IP

使用代理 IP 可以帮助绕过 IP 限制,或者模拟来自不同地区的访问。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options# 实例化配置对象
chrome_options = Options()# 配置对象添加使用代理的命令
proxy = "http://proxy_server:port"
chrome_options.add_argument(f'--proxy-server={proxy}')# 实例化带有配置对象的driver对象
driver = webdriver.Chrome(options=chrome_options)# 打开一个网站
driver.get('http://www.example.com')# 打印页面标题
print(driver.title)# 关闭浏览器
driver.quit()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/738356.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Deep Learning》(深度学习)中英文双版PDF免费下载

“深度学习”经典著作《Deep Learning》中文版pdf免费下载。 《Deep Learning》(深度学习)是一本皆在帮助学生和从业人员进入机器学习领域的教科书,以开源的形式免费在网络上提供,这本书是由学界领军人物 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 合力打造。中文…

微服务异常问题

多服务间,被依赖服务代码更新,依赖服务不生效问题被依赖服务代码更新后,jar包会更新 依赖服务并不是通过http直接调用依赖服务的代码,而是通过依赖jar包的方式,把被依赖服务更新后的jar包更新到依赖服务中即可。 举例: 有A服务,B服务;其中A服务依赖B服务。 当A服务有代…

深度学习--强化学习--基本概念Q V--94

目录1. 强化学习2. 马尔科夫链3. Q值和V值 1. 强化学习 首先我们需要明确,强化学习的任务是什么? 这用大白话说:就是我们希望用强化学习的方式,使智能体获得独立自主地完成某种任务的能力。 智能体学习和工作的地方,我们就称为环境。 注意!所谓独立自主,就是智能体一旦启…

京东毫秒级热key探测框架设计与实践,已实战于618大促

在拥有大量并发用户的系统中,热key一直以来都是一个不可避免的问题。或许是突然某些商品成了爆款,或许是海量用户突然涌入某个店铺,或许是秒杀时瞬间大量开启的爬虫用户, 这些突发的无法预先感知的热key都是系统潜在的巨大风险。 风险是什么呢?主要是数据层,其次是服务层…

刷题Phuck2--data协议差异

刷题Phuck2 使用arjun扫出hl参数,获取到源码 ​​ 源码: <?phpstream_wrapper_unregister(php);if(isset($_GET[hl])) highlight_file(__FILE__);$mkdir = function($dir) {system(mkdir -- .escapeshellarg($dir));};$randFolder = bin2hex(random_bytes(16));$mkdir(us…

常见Linux命令

1、查看目录:ls 常用用法: ls -l :以列表的形式展示;简写ll效果展示:2、终端清屏:clear 常用用法: ctr+L:清空屏幕当前的内容,不会重置终端效果展示: 使用前使用后3、切换目录:cd 常用用法:cd /:切换到根目录cd /xx(目录名) :切换到根目录下的xx目录cd ..:切换…

R语言大学城咖啡店消费问卷调查报告:信度分析、主成分分析可视化

全文链接:https://tecdat.cn/?p=34656 原文出处:拓端数据部落公众号 本次调查旨在了解文汇路咖啡店的市场状况,以便为学校周边咖啡店的经营发展提供积极的引导意义。我们通过问卷调查的方式,收集了大量的数据,通过r软件对数据进行了基本情况分析、信度分析、问卷调查数据…

R语言武汉流动人口趋势预测:灰色模型GM(1,1)、ARIMA时间序列、logistic逻辑回归模型|附代码数据

全文链接:http://tecdat.cn/?p=32496 原文出处:拓端数据部落公众号 人口流动与迁移,作为人类产生以来就存在的一种社会现象,伴随着人类文明的不断进步从未间断。 人力资源是社会文明进步、人民富裕幸福、国家繁荣昌盛的核心推动力量。当前,我国经济正处于从以政府主导的投…

1panel搭建halo+alist+兰空图床

由于服务器更新过后,ssh连接不上,机商vnc延迟卡的很,输个命令都不行,刚好centos断更了,换ubuntu系统了。也顺便从MySQL转到PostgreSQL。这个算是个记录,给有基础的人看的,你连ssh都不会连,那你得自己一步一步慢慢百度来。其实还是比较无脑的,除了1panel的反代,感觉设…

7.4

1005.K次取反后最大化的数组和 题意描述:[!NOTE] 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组:选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数组 可能的最大和 。 示例 1…

【专题】2024年6月数字化行业报告合集汇总PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p=36658 原文出处:拓端数据部落公众号 随着科技的飞速发展和全球数字化进程的加速推进,我们正处在一个充满变革与机遇的时代。从人工智能的深入应用到工业互联网的蓬勃发展,从智慧医疗的兴起到新能源汽车的普及,每一个领域都在经历着前所未有…

Body SurfaceModel Geometry

Body SurfaceModel Geometry 实体曲面模型几何图形是通过曲面模型表示产品的三维形状。应使用保持该几何表示的IfcShapeResentation的以下属性值:IfcShapeRepresentation.RepresentationIdentifier = Body IfcShapeRepresentation.RepresentationType = SurfaceModel IfcShape…

CSRF攻击与修复

基本原理受害者登录a.com,并保留了登录凭证(Cookie)。 攻击者引诱受害者访问了b.com。 b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie。 a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。 a.com以…

同步、异步、阻塞、非阻塞、Linux五种 I/O 模型,一篇文章搞定

●什么是同步、什么是异步?什么是阻塞、什么非阻塞?我自己的理解,大白话啊,同步和异步指的是函数调用完成任务的程度。一个任务的完成,包括发起、执行和结果返回三个阶段。   同步(synchronize)调用涵盖了这三个阶段。调用结束之后,任务肯定是有结果的,无论成败。  …

阿里Qwen2-72B大模型已是开源榜的王者,为什么还要推出其他参数模型,被其他模型打榜?

阿里Qwen2-72B大模型已是开源榜的王者,为什么还要推出其他参数模型,被其他模型打榜?6 月 27 日,全球知名的开源平台 Hugging Face 的联合创始人兼首席执行官 Clem 在社交平台激动宣布,阿里 Qwen2-72B 成为了开源模型排行榜的王者。这是一件大好事,说明了我们在大模型领域…

专利范文查询

地址http://epub.cnipa.gov.cn/Advanced方法无需登录 输入关键字,查询。 可下载范文, 格式:pdf范例 查询网址首页查询结果下载作者:mohistH 出处:https://www.cnblogs.com/pandamohist/ 本文版权归作者和博客园共有,谢绝一切形式的转载,否则将追究法律责任。

代码随想录算法训练营第五十天 | 1143.最长公共子序列 392.判断子序列

1143.最长公共子序列 题目链接 文章讲解 视频讲解dp[i][j]: 表示以text1以i-1为结尾text2以j-1为结尾的最长公共子序列为dp[i][j] 递推公式:如果text1[i-1] == text2[j-1] 那么dp[i][j] = dp[i-1][j-1] + 1;如果不相同的话,那么dp[i][j] = max(dp[i-1][j], dp[i][j-1]);class…

苹果系统U盘/镜像恢复基础安装教程

目前,刻录U盘进行安装是主流选择,这样安装调试好的黑苹果macOS问题最少,也较为稳定。镜像恢复安装的方式,某宝上的远程安装的商家都是这么干的,但是其中很大一部分商家存在一个严重问题:macOS 从10.14 开始全面采用了 APFS 文件系统,但是当时的恢复软件无法支持这个文件…

markdown,学习第一天

markdown学习 标题 三级标题 字体 hello world! hello world! hello world! hello world! hello world! 引用,前面加>狂神牛逼分割线,加“---”,加“***”图片:超链接:英文字符下,这里描述链接 [点击到我自己的博客园](屮艸芔茻13 - 博客园 (cnblogs.com)) 列表,1.加空格…

vue项目中使用AES实现密码加密解密ECB和CBC模式)

ECB: 是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。CBC: 是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。(不容易主动攻击,安全性好于ECB,是SSL、IPSe…