如图 ,自己 目前用Selenium 无法保存 定位到数据的 properties 所有数据
我先自己定位到
该回答引用于ChatGPT:
您可以使用Selenium中的execute_script函数来执行JavaScript代码,从而获取当前页面中标签的属性值。具体步骤如下:
from selenium import webdriver
# 创建Chrome浏览器驱动
driver = webdriver.Chrome()
# 加载网页
driver.get("https://example.com")
# 找到需要获取属性值的标签
element = driver.find_element_by_id("my-element-id")
# 使用execute_script执行JavaScript代码获取标签属性值
attribute_value = driver.execute_script("return arguments[0].getAttribute('title');", element)
# 打印属性值
print(attribute_value)
在上述示例代码中,我们通过find_element_by_id函数找到id为"my-element-id"的标签,然后使用execute_script函数执行JavaScript代码"return arguments[0].getAttribute('title');"获取该标签的"title"属性值。
您可以根据自己需要修改上述代码来获取不同标签的各种属性值。另外,如果您需要获取整个页面中所有标签的属性值,可以使用Selenium中的find_elements方法找到所有标签,然后逐一获取它们的属性值。
该回答引用ChatGPTpython
from selenium import webdriver
import json
import requests
# 启动Chrome并开启Remote Debugging协议
options = webdriver.ChromeOptions()
options.add_argument("--remote-debugging-port=9222")
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)
# 导航到目标URL
driver.get("https://www.example.com")
# 使用Remote Debugging协议获取当前页面的所有属性
response = requests.get("http://localhost:9222/json")
json_response = json.loads(response.content.decode("utf-8"))
webSocketDebuggerUrl = json_response[0]["webSocketDebuggerUrl"]
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.add_argument(f"--remote-debugging-port=9222")
chrome_options.add_argument(f"--user-data-dir={user_data_dir}")
chrome_options.add_argument(f"--profile-directory={profile_directory}")
browser = webdriver.Chrome(options=chrome_options)
browser.get(f'chrome-devtools://devtools/bundled/inspector.html')
browser.execute_script(f'window.WS = new WebSocket("{webSocketDebuggerUrl}");')
js_script = "window.WS.send('{"id": 1,"method": "Runtime.getProperties","params": {"objectId": "window", "ownProperties": true}}');"
browser.execute_script(js_script)
props_response = browser.execute_script("return window.propsResp;")
# 打印所有属性及其值
for prop in props_response['result']['result']:
print(prop['name'], prop['value'])
# 关闭浏览器会话
browser.quit()
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
在使用 Selenium 定位并保存 Chrome 中的 properties 数据之前,需要先确认您想要保存的是哪一个选项卡下的数据,例如网络请求、资源、元素等选项卡。
关于如何通过 Selenium 定位并保存 Chrome 中的 properties 数据,下面给出一个简单的示例供参考:
```python
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com%22/)
driver.find_element_by_css_selector(".devtools-tabbar .devtools-tab:nth-child(2)").click()
time.sleep(1)
property_element = driver.find_element_by_css_selector(".tree-outline .webkit-line-content")
name = property_element.find_element_by_css_selector(".name").get_property("textContent")
value = property_element.find_element_by_css_selector(".value").get_property("textContent")
print(name, value)
driver.quit()
`
以下内容部分参考ChatGPT模型:
首先,可以使用Selenium的execute_script
方法来调用JavaScript代码,从而获取元素的属性值。具体的代码如下:
from selenium import webdriver
# 启动Chrome浏览器
driver = webdriver.Chrome()
# 打开网页
driver.get("https://www.baidu.com")
# 定位元素
elem = driver.find_element_by_id("kw")
# 获取元素的属性值
properties = driver.execute_script("var items = {}; "
"for (index = 0; index < arguments[0].attributes.length; ++index) { "
"items[arguments[0].attributes[index].name] = arguments[0].attributes[index].value }; "
"return items;", elem)
# 输出属性值
print(properties)
# 关闭浏览器
driver.quit()
这段代码会打开Chrome浏览器,并打开百度首页,然后定位到搜索框元素,通过JavaScript代码获取元素的所有属性值,并输出到控制台。
需要注意的是,这种方法只能获取元素的属性值,如果要获取其他的一些信息,比如元素的文本内容或者CSS属性值,就需要使用其他的方法。
如果我的建议对您有帮助、请点击采纳、祝您生活愉快
使用获取完整path,可以定位
不知道你这个问题是否已经解决, 如果还没有解决的话:引用new bing作答:
properties 是 Chrome DevTools 中的一个选项卡,可以显示当前页面元素的一些属性和事件。如果您想要获取这些属性和事件的信息,可以使用 Selenium 的 execute_script() 方法,执行 JavaScript 代码来获取。
下面是一个示例代码,可以打开 Chrome 浏览器,加载指定网页,打开 DevTools 的 Properties 选项卡,获取当前页面中一个元素的 properties 内容,并将其保存到本地文件中:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
# 配置 Chrome DevTools Protocol API
caps = DesiredCapabilities.CHROME
caps["goog:loggingPrefs"] = {"performance": "ALL"}
# 启动 Chrome 浏览器
service = Service('/path/to/chromedriver')
driver = webdriver.Chrome(service=service, desired_capabilities=caps)
# 加载网页
driver.get('https://www.example.com')
# 打开 DevTools 的 Properties 选项卡
driver.execute_script('''
var tab = new Promise(function(resolve, reject) {
chrome.devtools.panels.create(
"Properties",
"",
"panel.html",
function(panel) {
panel.onShown.addListener(function(win) {
resolve(win);
});
}
);
});
tab.then(function(win) {
win.document.querySelector("#search").value = "";
win.document.querySelector(".filter-all").click();
});
''')
# 获取一个元素的 properties 内容
element = driver.find_element_by_css_selector('div.my-element')
properties = driver.execute_script('''
return Array.from(window.webstoreProperties.properties).find(function(prop) {
return prop.name === arguments[0];
}).value;
''', element.get_attribute('id'))
# 将 properties 内容保存到本地文件
with open('properties.txt', 'w', encoding='utf-8') as f:
f.write(properties)
这段代码中,首先使用 execute_script() 方法执行了一段 JavaScript 代码,创建了一个名为 Properties 的选项卡,并将其切换到了 All 过滤器。然后,使用 find_element_by_css_selector() 方法获取了一个名为 my-element 的