我试图单击Linkedin个人资料中的“我的网络”按钮。我可以使用“ goto”方法直接转到该网址,但我希望能够单击它。
我尝试使用“复制选择器”,但它似乎不起作用。
const BUTTON_SELECTOR = '#mynetwork-nav-item';
await page.click(BUTTON_SELECTOR);
我可以登录,但此后不起作用。
完整代码-
const puppeteer = require('puppeteer');
(async () => {
/* Initiate the Puppeteer browser */
const browser = await puppeteer.launch({ headless: false, defaultViewport: { width: 1366, height: 768 }});
const page = await browser.newPage();
await page.goto(`https://www.linkedin.com`, { waitUntil: 'networkidle0' });
let element, formElement, tabs;
element = await page.$x(`//a[contains(text(),'Sign in')]`);
await element[0].click();
await page.waitForNavigation();
element = await page.$x(`//*[@id="username"]`);
await element[0].type(`some_id@example.com`);
element = await page.$x(`(.//*[normalize-space(text()) and normalize-space(.)='Welcome Back'])[1]/following::div[3]`);
await element[0].click();
element = await page.$x(`//*[@id="password"]`);
await element[0].click();
element = await page.$x(`//*[@id="password"]`);
await element[0].type(`some_password`);
await page.keyboard.press(`Enter`)
const MY_NETWORK_BUTTON = '#mynetwork-tab-icon';
await page.waitForSelector(MY_NETWORK_BUTTON, {visible: true});
const [response] = await Promise.all([
page.waitForNavigation(), // The promise resolves after navigation has finished
page.click(MY_NETWORK_BUTTON), // Clicking the link will indirectly cause a navigation
]);
console.log('CURRENT URL IS: ', response.url());
})();
答案 0 :(得分:0)
首先尝试等待选择器,然后应该更改选择器,然后单击它。
已更新:
const MY_NETWORK_BUTTON = '#mynetwork-tab-icon';
await page.waitForSelector(MY_NETWORK_BUTTON, {visible: true});
const [response] = await Promise.all([
page.waitForNavigation(), // The promise resolves after navigation has finished
page.click(MY_NETWORK_BUTTON), // Clicking the link will indirectly cause a navigation
]);
console.log('CURRENT URL IS: ', response.url());
输出:
答案 1 :(得分:0)
只需等待导航完成就足以正确更改选项卡
gridOptions.getRowStyle = function(params) {
if (params.node.rowIndex === 'the index of row you want to change color ') {
return { background: 'red' }
}
}
但是问题可能出在其他地方,例如,当我最初创建帐户时,网页提示我登录后立即添加电话号码,因此也许您无法单击“网络”标签,因为某些情况下此选择器不存在其他原因。
通常不建议使用该表单登录,因为许多网页都有针对报废/非人类用户的对策。特别是Linkedin,可以要求您完成验证码输入,以证明您不是机器人。
如果您确实想以这种方式登录,则可以通过将这些选择器更改为简单的
来提高代码的责任感。await Promise.all([
page.waitForNavigation(),
page.click(MY_NETWORK_BUTTON)
]);
否则,我建议使用cookie登录,这将进一步简化代码。
您可以通过致电获取伪造者接受的格式的Cookie列表
await page.goto("https:\/\/www.linkedin.com", { waitUntil: 'networkidle0' });
await page.type("input[name='session_key']",email);
await page.type("input[name='session_password']",password);
await page.keyboard.press(`Enter`);
然后再用
进行设置await page.cookies();
我不太确定linkedin用于在cookie内存储用户信息的格式,但是似乎仅加载名为await page.setCookie(cookie)
的cookie就足够了。
li_at