我正在尝试从 William Hill 网站获取足球比赛的评论。 为了获得它们,我需要 id="box_commentaries" 的子元素出现。
为了让它们出现,我需要模拟单击 class="_commentary"。
有两种方法可以实现:直接点击或者在控制台调用该函数。
我的问题是如何在不打开网络浏览器的情况下执行此操作?我不想打开网络浏览器,因为我每分钟都会同时收到数十场比赛的评论,而且我不想消耗太多内存,因为我需要做更多的事情。
我使用的功能是这样的:
(function() {
setTimeout(function() {
document.getElementsByClassName('_commentary')[0].click();
}, 3000);
})();
要直接进入记分牌页面,只需点击此链接:
f'https://sports.whcdn.net/scoreboards/app/football/index.html?eventId={match_id}&sport=football&locale=en-gb&streamingAvailable=false&showSuggestions=true&expandDetails=true&showStreaming=false&referrer=https%3A%2F% 2Fsports.williamhill.com'
您只需将
match_id
更改为任何现场比赛的 id
附注我知道如何使用 Selenium,并且用它编写的代码非常慢。现在我正在寻找其他方式来提出这个请求
考虑使用 https://npmjs.org/package/jsdom
您需要对其进行设置,以便它加载脚本等,并且它可以模拟浏览器而无需运行无头/头浏览器。如果网站有很多 js 做一些通常不应该做的事情,那么它仍然有可能无法工作。
据我所知,您可以使用 Puppeteer 或 Selenium 来实现此目的。 Selenium 非常适合测试自动化方面。但在这种情况下,您可以将其用于您的用例。在
puppeteer
中,您可以指定上面的headless
:true
或false
,如下所示:
let browser = await puppeteer.launch({headless: true});
const page = await browser.newPage();
await page.goto('YOUR_SITE');
同样,在 Selenium 中您可以执行以下操作:
WebDriverManager.chromedriver().setup();
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
driver = webdriver.Chrome(executable_path="./chromedriver",options=chrome_options)
url = "your url here"
driver.get(url)
希望这有帮助。