我在vba中编写了一个刮刀来解析一些来自torrent网站的电影信息.我使用IE并queryselector完成任务.当我执行我的代码时,它会解析所有内容以及弹出错误.似乎错误出现了,而不是继续.如果我取消错误框,那么我可以看到结果.我在下面上传了两张图片,向您展示我遇到的错误.如何在没有任何错误的情况下成功执行代码?提前致谢.
这是完整的代码:
Sub Torrent_Data()
Dim IE As New InternetExplorer, html As HTMLDocument
Dim post As Object
With IE
.Visible = False
.navigate "https://yts.am/browse-movies"
Do While .readyState <> READYSTATE_COMPLETE: Loop
Set html = .Document
End With
For Each post In html.querySelectorAll(".browse-movie-bottom")
Row = Row + 1: Cells(Row, 1) = post.queryselector(".browse-movie-title").innerText
Cells(Row, 2) = post.queryselector(".browse-movie-year").innerText
Next post
IE.Quit
End Sub
Run Code Online (Sandbox Code Playgroud)
我遇到的错误:


这两个错误同时出现.我正在使用Internet Explorer 11.
另一方面,如果我尝试如下,它会成功地带来结果,没有任何问题.
Sub Torrent_Data()
Dim IE As New InternetExplorer, html As HTMLDocument
Dim post As …Run Code Online (Sandbox Code Playgroud) 我得到了与在线商店https://www.tiendasjumbo.co/buscar?q=mani相关的下一个网址,但我无法将产品标签提取到另一个字段:
from selenium import webdriver
import time
from random import randint
driver = webdriver.Firefox(executable_path= "C:\Program Files (x86)\geckodriver.exe")
driver.implicitly_wait(10)
time.sleep(4)
url = "https://www.tiendasjumbo.co/buscar?q=mani"
driver.maximize_window()
driver.get(url)
driver.find_element_by_xpath('//h1[@class="impulse-title"]')
Run Code Online (Sandbox Code Playgroud)
我做错了什么,我也尝试过切换 iframe 但没有办法实现我的目标?欢迎任何帮助。
我试图找到使用 React 测试库来测试 div 元素的 textContent 的最佳实践。
假设我想测试这个简单的 React 组件,看看它是否{props.text}在 HTML DOM 上正确呈现。
const Simple = props => (
<>
<div> {props.text} </div>
<div> test text </div>
</>
);
Run Code Online (Sandbox Code Playgroud)
我尝试使用getByText,然后进行测试expect(getByText('text passed as prop')).toBeDefined(),但它似乎无法正常工作。
<div />如果我为第一个添加一个 className 或 id ,那么可能我可以直接选择,那一定会容易得多querySelector,但是如果我不想在此处添加任何 HTML 属性怎么办?如何正确定位这个元素?
有什么解决方案可以找到第一个没有属性的元素并测试其内部文本吗?
我很困惑为什么$1,firstBB调用querySelector('.aa .bb')应该在元素下执行#root。
const $1 = document.querySelector('#root').querySelector('.aa .bb');
const $2 = document.querySelector('#root').querySelector('.aa').querySelector('.bb');
document.querySelector('#result').innerHTML = `$1 is ${$1.id}; $2 is ${$2.id}`Run Code Online (Sandbox Code Playgroud)
<div class="aa" id="root">
<div class="bb" id="firstBB">xxx</div>
<div class="aa">
<div class="bb" id="secondBB">xxx</div>
</div>
</div>
<div>Result: <span id="result"></span></div>Run Code Online (Sandbox Code Playgroud)
Chrome版本:116.0.5845.188
这是 的正确行为吗querySelector?
以下两种选择节点的方法不应该产生相同的结果吗?
let tmp = fruits.querySelector("ul:first-of-type li:first-of-type");
tmp = tmp.querySelector("span")
Run Code Online (Sandbox Code Playgroud)
对比
let tmp = fruits.querySelector("ul:first-of-type li:first-of-type span");
Run Code Online (Sandbox Code Playgroud)
(在此处查看实际操作)
我已经在 Firefox 和 chrome 中对此进行了测试。两种情况下的结果不同。任何人都可以请解释为什么?
堆栈片段中的示例:
let tmp = fruits.querySelector("ul:first-of-type li:first-of-type");
tmp = tmp.querySelector("span")
Run Code Online (Sandbox Code Playgroud)
let tmp = fruits.querySelector("ul:first-of-type li:first-of-type span");
Run Code Online (Sandbox Code Playgroud)
我该如何制作:
document.getElementsByClassName("first")[1].getElementsByClassName("second")[2];
Run Code Online (Sandbox Code Playgroud)
但是用querySelector呢?
我的猜测是:
document.querySelector(".first[1] > .second[2]");
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。
早在 2021 年 5 月 19 日,我就最近(21 年 4 月至 5 月)对与延迟绑定引用相关的接口的可疑更改写了此问答mshtml.dll。如果您愿意,这是第 2 部分。
以前,在诸如this和this 之类的问题中,我曾指出缺乏对各种 CSS 选择器的支持mshtml.dll,尤其是关于伪类。在上述问题中,我强调了这一点nth-child(),nth-of-type()但并未针对MSHTML.
通常情况下,这表现在这里,不支持选择语法可以导致:
运行时错误“-2140143604 (8070000c)”:由于错误 8070000c,无法完成操作。
我希望有些事情会因为不再支持相关的各种版本/平台而中断Internet Explorer (IE)(这MSHTML与 - 请参阅我的this。我没想到的是最近对支持的 CSS 选择器的改进。以以下示例为例:
Option Explicit
''Required references:
'' Microsoft HTML Object Library
Public Sub CssTest()
Const URL = "https://books.toscrape.com/"
Dim html As MSHTML.HTMLDocument
Set html = New MSHTML.HTMLDocument …Run Code Online (Sandbox Code Playgroud) 给出以下标记(为了简洁起见,我仅包含相关部分)
<ul>
<li id="item">
<a href="#foo">Stuff</a>
<ul>
<li> <a href="#foo">Foo stuff</a></li>
<li><a href="#bar">Bar Stuff</a></li>
<li><a href="#foobar">Foo-Bar Stuff</a></li>
</ul>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
假设我有一个对ID 为“item”的li元素的引用,我可以这样得到:
let item = document.querySelector('#item');
Run Code Online (Sandbox Code Playgroud)
现在我需要检索嵌套ul列表中的最后一个锚元素。为此,我将使用“最后一个子”选择器。这是我最初尝试的:
let lastLink = item.querySelector('li:last-child > a');
Run Code Online (Sandbox Code Playgroud)
我认为这可以解决问题,但可惜它实际上返回了标记中的第一个链接(“Stuff”)。我不太明白这一点,因为我的基本元素已经是“item”元素,我要求它在该基本元素中找到 li元素,这是其父元素的最后一个子元素,然后返回a元素从里面。
事实上,如果我这样做:
let lastLink = item.querySelector('li:last-child');
Run Code Online (Sandbox Code Playgroud)
它实际上返回嵌套 ul 列表中的最后一个 li 元素,那么为什么第一个选项不能简单地获取其中的'a'元素呢?
以下是我尝试过的其他一些有效的方法:
let lastLink = item.querySelector('#item li:last-child > a');
Run Code Online (Sandbox Code Playgroud)
但是,由于我已经有了对基本元素的引用,因此在此处指定其 ID 似乎毫无意义。这些也可以工作并返回正确的a元素:
let lastLink = item.querySelector('li ul li:last-child > a');
let …Run Code Online (Sandbox Code Playgroud) 我正在尝试根据超市的价格进行一些网络抓取。它与 Node.js 和 puppeteer 一起使用。我可以通过接受 cookie 并单击“加载更多按钮”开始浏览网站。但是当我尝试使用 querySelectorAll 读取包含产品的 div 时,我陷入了困境。即使我等待特定的 div 出现,它也会返回未定义。我缺少什么?
\n问题出在代码块的末尾。
\nconst { product } = require("puppeteer");\n\nconst scraperObjectAll = {\n url: 'https://www.bilkatogo.dk/s/?query=',\n async scraper(browser) {\n let page = await browser.newPage();\n console.log(`Navigating to ${this.url}`);\n await page.goto(this.url);\n\n // accept cookies\n await page.evaluate(_ => {\n CookieInformation.submitAllCategories();\n });\n\n var productsRead = 0;\n var productsTotal = Number.MAX_VALUE;\n\n while (productsRead < 100) {\n // Wait for the required DOM to be rendered\n await page.waitForSelector('button.btn.btn-dark.border-radius.my-3');\n // Click button to read more products\n …Run Code Online (Sandbox Code Playgroud) 我有一个<div>里面有一些孩子,里面包含如下文字:
<div class="accordion-item__panel">
<h5>The baby tears the pages of the</h5>
<p>books with her <span>hands.</span></p>
<p class="body-small">What is the funniest thing the baby does?</p>
</div>
Run Code Online (Sandbox Code Playgroud)
我想要 DIV 中包含的文本accordion-item__panel和输出,例如:
The baby tears the pages of the books with her hands. What is the funniest thing the baby does?
Run Code Online (Sandbox Code Playgroud)
电流输出:
The baby tears the pages of the books with her hands. hands. What is the funniest thing the baby does?
Run Code Online (Sandbox Code Playgroud)
添加了“手”。两倍,因为它在查询元素时保留了两次。
JavaScript:
let desc = "";
const descItems = …Run Code Online (Sandbox Code Playgroud) queryselector ×10
javascript ×6
html ×2
vba ×2
children ×1
css ×1
excel ×1
foreach ×1
jestjs ×1
mshtml ×1
puppeteer ×1
python ×1
reactjs ×1
selenium ×1
shadow-dom ×1
web-scraping ×1