[新手求助] puppeteer page.$eval 判断与 page.click 执行
前言
小白刚踏入Node.js
很多还不熟悉,请各位大大多多包涵。
提问
目前page.click
是直接针对child
位置来抓取,但是如果位置变动,就会点击错误。
请问该如何判断Reload
按钮是在IESC
底下的按钮,并且Click
点击。
main.js
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://admin:admin@127.0.0.1:8080/manager');
await page.click('body > table:nth-child(9) > tbody > tr:nth-child(5) > td:nth-child(6) > form:nth-child(3) > small > input[type=submit]');
// console.log(await page.content());
await browser.close();
})();
Tomcat manager index.html image
Tomcat manager index.html code
<html><head>
<style>
H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}
table {
width: 100%;
}
td.page-title {
text-align: center;
vertical-align: top;
font-family:sans-serif,Tahoma,Arial;
font-weight: bold;
background: white;
color: black;
}
td.title {
text-align: left;
vertical-align: top;
font-family:sans-serif,Tahoma,Arial;
font-style:italic;
font-weight: bold;
background: #D2A41C;
}
td.header-left {
text-align: left;
vertical-align: top;
font-family:sans-serif,Tahoma,Arial;
font-weight: bold;
background: #FFDC75;
}
td.header-center {
text-align: center;
vertical-align: top;
font-family:sans-serif,Tahoma,Arial;
font-weight: bold;
background: #FFDC75;
}
td.row-left {
text-align: left;
vertical-align: middle;
font-family:sans-serif,Tahoma,Arial;
color: black;
}
td.row-center {
text-align: center;
vertical-align: middle;
font-family:sans-serif,Tahoma,Arial;
color: black;
}
td.row-right {
text-align: right;
vertical-align: middle;
font-family:sans-serif,Tahoma,Arial;
color: black;
}
TH {
text-align: center;
vertical-align: top;
font-family:sans-serif,Tahoma,Arial;
font-weight: bold;
background: #FFDC75;
}
TD {
text-align: center;
vertical-align: middle;
font-family:sans-serif,Tahoma,Arial;
color: black;
}
form {
margin: 1;
}
form.inline {
display: inline;
}
</style>
<title>/manager</title>
</head>
<body bgcolor="#FFFFFF">
<table cellspacing="4" border="0">
<tbody><tr>
<td colspan="2">
<a href="http://www.apache.org/">
<img border="0" alt="The Apache Software Foundation" align="left" src="/manager/images/asf-logo.gif">
</a>
<a href="http://tomcat.apache.org/">
<img border="0" alt="The Tomcat Servlet/JSP Container" align="right" src="/manager/images/tomcat.gif">
</a>
</td>
</tr>
</tbody></table>
<hr size="1" noshade="noshade">
<table cellspacing="4" border="0">
<tbody><tr>
<td class="page-title" bordercolor="#000000" align="left" nowrap="">
<font size="+2">Tomcat Web Application Manager</font>
</td>
</tr>
</tbody></table>
<br>
<table border="1" cellspacing="0" cellpadding="3">
<tbody><tr>
<td class="row-left" width="10%"><small><strong>Message:</strong></small> </td>
<td class="row-left"><pre>OK</pre></td>
</tr>
</tbody></table>
<br>
<table border="1" cellspacing="0" cellpadding="3">
<tbody><tr>
<td colspan="4" class="title">Manager</td>
</tr>
<tr>
<td class="row-left"><a href="/manager/html/list?org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72">List Applications</a></td>
<td class="row-center"><a href="/manager/../docs/html-manager-howto.html?org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72">HTML Manager Help</a></td>
<td class="row-center"><a href="/manager/../docs/manager-howto.html?org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72">Manager Help</a></td>
<td class="row-right"><a href="/manager/status?org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72">Server Status</a></td>
</tr>
</tbody></table>
<br>
<table border="1" cellspacing="0" cellpadding="3">
<tbody><tr>
<td colspan="6" class="title">Applications</td>
</tr>
<tr>
<td class="header-left"><small>Path</small></td>
<td class="header-left"><small>Version</small></td>
<td class="header-center"><small>Display Name</small></td>
<td class="header-center"><small>Running</small></td>
<td class="header-left"><small>Sessions</small></td>
<td class="header-left"><small>Commands</small></td>
</tr>
<tr>
<td class="row-left" bgcolor="#FFFFFF" rowspan="2"><small><a href="/">/</a></small></td>
<td class="row-left" bgcolor="#FFFFFF" rowspan="2"><small><i>None specified</i></small></td>
<td class="row-left" bgcolor="#FFFFFF" rowspan="2"><small>Welcome to Tomcat</small></td>
<td class="row-center" bgcolor="#FFFFFF" rowspan="2"><small>true</small></td>
<td class="row-center" bgcolor="#FFFFFF" rowspan="2"><small><a href="/manager/html/sessions?path=/&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72">0</a></small></td>
<td class="row-left" bgcolor="#FFFFFF">
<small>Start</small>
<form class="inline" method="POST" action="/manager/html/stop?path=/&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72"> <small><input type="submit" value="Stop"></small> </form>
<form class="inline" method="POST" action="/manager/html/reload?path=/&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72"> <small><input type="submit" value="Reload"></small> </form>
<form class="inline" method="POST" action="/manager/html/undeploy?path=/&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72"> <small><input type="submit" value="Undeploy"></small> </form>
</td>
</tr><tr>
<td class="row-left" bgcolor="#FFFFFF">
<form method="POST" action="/manager/html/expire?path=/&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72">
<small>
<input type="submit" value="Expire sessions"> with idle ≥ <input type="text" name="idle" size="5" value="30"> minutes
</small>
</form>
</td>
</tr>
<tr>
<td class="row-left" bgcolor="#C3F3C3" rowspan="2"><small><a href="/IESC/">/IESC</a></small></td>
<td class="row-left" bgcolor="#C3F3C3" rowspan="2"><small><i>None specified</i></small></td>
<td class="row-left" bgcolor="#C3F3C3" rowspan="2"><small>Interfly Enterprise Service Center</small></td>
<td class="row-center" bgcolor="#C3F3C3" rowspan="2"><small>true</small></td>
<td class="row-center" bgcolor="#C3F3C3" rowspan="2"><small><a href="/manager/html/sessions?path=/IESC&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72">0</a></small></td>
<td class="row-left" bgcolor="#C3F3C3">
<small>Start</small>
<form class="inline" method="POST" action="/manager/html/stop?path=/IESC&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72"> <small><input type="submit" value="Stop"></small> </form>
<form class="inline" method="POST" action="/manager/html/reload?path=/IESC&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72"> <small><input type="submit" value="Reload"></small> </form>
<form class="inline" method="POST" action="/manager/html/undeploy?path=/IESC&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72"> <small><input type="submit" value="Undeploy"></small> </form>
</td>
</tr><tr>
<td class="row-left" bgcolor="#C3F3C3">
<form method="POST" action="/manager/html/expire?path=/IESC&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72">
<small>
<input type="submit" value="Expire sessions"> with idle ≥ <input type="text" name="idle" size="5" value="30"> minutes
</small>
</form>
</td>
</tr>
<tr>
<td class="row-left" bgcolor="#FFFFFF" rowspan="2"><small><a href="/LineBot/">/LineBot</a></small></td>
<td class="row-left" bgcolor="#FFFFFF" rowspan="2"><small><i>None specified</i></small></td>
<td class="row-left" bgcolor="#FFFFFF" rowspan="2"><small>LineBot</small></td>
<td class="row-center" bgcolor="#FFFFFF" rowspan="2"><small>true</small></td>
<td class="row-center" bgcolor="#FFFFFF" rowspan="2"><small><a href="/manager/html/sessions?path=/LineBot&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72">0</a></small></td>
<td class="row-left" bgcolor="#FFFFFF">
<small>Start</small>
<form class="inline" method="POST" action="/manager/html/stop?path=/LineBot&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72"> <small><input type="submit" value="Stop"></small> </form>
<form class="inline" method="POST" action="/manager/html/reload?path=/LineBot&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72"> <small><input type="submit" value="Reload"></small> </form>
<form class="inline" method="POST" action="/manager/html/undeploy?path=/LineBot&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72"> <small><input type="submit" value="Undeploy"></small> </form>
</td>
</tr><tr>
<td class="row-left" bgcolor="#FFFFFF">
<form method="POST" action="/manager/html/expire?path=/LineBot&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72">
<small>
<input type="submit" value="Expire sessions"> with idle ≥ <input type="text" name="idle" size="5" value="30"> minutes
</small>
</form>
</td>
</tr>
<tr>
<td class="row-left" bgcolor="#C3F3C3" rowspan="2"><small><a href="/manager/">/manager</a></small></td>
<td class="row-left" bgcolor="#C3F3C3" rowspan="2"><small><i>None specified</i></small></td>
<td class="row-left" bgcolor="#C3F3C3" rowspan="2"><small>Tomcat Manager Application</small></td>
<td class="row-center" bgcolor="#C3F3C3" rowspan="2"><small>true</small></td>
<td class="row-center" bgcolor="#C3F3C3" rowspan="2"><small><a href="/manager/html/sessions?path=/manager&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72">3</a></small></td>
<td class="row-left" bgcolor="#C3F3C3">
<small>
Start
Stop
Reload
Undeploy
</small>
</td>
</tr><tr>
<td class="row-left" bgcolor="#C3F3C3">
<form method="POST" action="/manager/html/expire?path=/manager&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72">
<small>
<input type="submit" value="Expire sessions"> with idle ≥ <input type="text" name="idle" size="5" value="30"> minutes
</small>
</form>
</td>
</tr>
<tr>
<td class="row-left" bgcolor="#FFFFFF" rowspan="2"><small><a href="/oas/">/oas</a></small></td>
<td class="row-left" bgcolor="#FFFFFF" rowspan="2"><small><i>None specified</i></small></td>
<td class="row-left" bgcolor="#FFFFFF" rowspan="2"><small>oas</small></td>
<td class="row-center" bgcolor="#FFFFFF" rowspan="2"><small>true</small></td>
<td class="row-center" bgcolor="#FFFFFF" rowspan="2"><small><a href="/manager/html/sessions?path=/oas&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72">14</a></small></td>
<td class="row-left" bgcolor="#FFFFFF">
<small>Start</small>
<form class="inline" method="POST" action="/manager/html/stop?path=/oas&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72"> <small><input type="submit" value="Stop"></small> </form>
<form class="inline" method="POST" action="/manager/html/reload?path=/oas&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72"> <small><input type="submit" value="Reload"></small> </form>
<form class="inline" method="POST" action="/manager/html/undeploy?path=/oas&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72"> <small><input type="submit" value="Undeploy"></small> </form>
</td>
</tr><tr>
<td class="row-left" bgcolor="#FFFFFF">
<form method="POST" action="/manager/html/expire?path=/oas&org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72">
<small>
<input type="submit" value="Expire sessions"> with idle ≥ <input type="text" name="idle" size="5" value="30"> minutes
</small>
</form>
</td>
</tr>
</tbody></table>
<br>
<table border="1" cellspacing="0" cellpadding="3">
<tbody><tr>
<td colspan="2" class="title">Deploy</td>
</tr>
<tr>
<td colspan="2" class="header-left"><small>Deploy directory or WAR file located on server</small></td>
</tr>
<tr>
<td colspan="2">
<form method="post" action="/manager/html/deploy?org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72">
<table cellspacing="0" cellpadding="3">
<tbody><tr>
<td class="row-right">
<small>Context Path (required):</small>
</td>
<td class="row-left">
<input type="text" name="deployPath" size="20">
</td>
</tr>
<tr>
<td class="row-right">
<small>XML Configuration file URL:</small>
</td>
<td class="row-left">
<input type="text" name="deployConfig" size="20">
</td>
</tr>
<tr>
<td class="row-right">
<small>WAR or Directory URL:</small>
</td>
<td class="row-left">
<input type="text" name="deployWar" size="40">
</td>
</tr>
<tr>
<td class="row-right">
</td>
<td class="row-left">
<input type="submit" value="Deploy">
</td>
</tr>
</tbody></table>
</form>
</td>
</tr>
<tr>
<td colspan="2" class="header-left"><small>WAR file to deploy</small></td>
</tr>
<tr>
<td colspan="2">
<form method="post" action="/manager/html/upload?org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72" enctype="multipart/form-data">
<table cellspacing="0" cellpadding="3">
<tbody><tr>
<td class="row-right">
<small>Select WAR file to upload</small>
</td>
<td class="row-left">
<input type="file" name="deployWar" size="40">
</td>
</tr>
<tr>
<td class="row-right">
</td>
<td class="row-left">
<input type="submit" value="Deploy">
</td>
</tr>
</tbody></table>
</form>
</td>
</tr>
</tbody></table>
<br>
<table border="1" cellspacing="0" cellpadding="3">
<tbody><tr>
<td colspan="2" class="title">Diagnostics</td>
</tr>
<tr>
<td colspan="2" class="header-left"><small>Check to see if a web application has caused a memory leak on stop, reload or undeploy</small></td>
</tr>
<tr>
<td colspan="2">
<form method="post" action="/manager/html/findleaks?org.apache.catalina.filters.CSRF_NONCE=AA7CC0E4CCA8F6D7F026B2509DE78A72">
<table cellspacing="0" cellpadding="3">
<tbody><tr>
<td class="row-left">
<input type="submit" value="Find leaks">
</td>
<td class="row-left">
<small>This diagnostic check will trigger a full garbage collection. Use it with extreme caution on production systems.</small>
</td>
</tr>
</tbody></table>
</form>
</td>
</tr>
</tbody></table>
<br><table border="1" cellspacing="0" cellpadding="3">
<tbody><tr>
<td colspan="8" class="title">Server Information</td>
</tr>
<tr>
<td class="header-center"><small>Tomcat Version</small></td>
<td class="header-center"><small>JVM Version</small></td>
<td class="header-center"><small>JVM Vendor</small></td>
<td class="header-center"><small>OS Name</small></td>
<td class="header-center"><small>OS Version</small></td>
<td class="header-center"><small>OS Architecture</small></td>
<td class="header-center"><small>Hostname</small></td>
<td class="header-center"><small>IP Address</small></td>
</tr>
<tr>
<td class="row-center"><small>Apache Tomcat/7.0.67</small></td>
<td class="row-center"><small>1.8.0_201-b09</small></td>
<td class="row-center"><small>Oracle Corporation</small></td>
<td class="row-center"><small>Linux</small></td>
<td class="row-center"><small>3.2.0-91-generic</small></td>
<td class="row-center"><small>amd64</small></td>
<td class="row-center"><small>s1.eventpal.com.tw</small></td>
<td class="row-center"><small>127.0.1.1</small></td>
</tr>
</tbody></table>
<br>
<hr size="1" noshade="noshade">
<center><font size="-1" color="#525D76">
<em>Copyright © 1999-2015, Apache Software Foundation</em></font></center>
</body></html>
1 回复
附上自己努力的结果,这样应该是可以解决掉我自己的问题。 如果有大大提供更好的解法,再麻烦赐教~
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://admin:admin@127.0.0.1:8080/manager');
await page.evaluate(() => {
let elements = document.getElementsByClassName('inline');
for (var element of elements)
if (element.action.indexOf('/IESC') != -1 && element.action.indexOf('stop') != -1) {
element.children[0].children[0].classList.add("IESC_Stop");
}
});
try {
await page.click('.IESC_Stop');
} catch (e) {
console.log('No Stop Btn');
}
await page.evaluate(() => {
let elements = document.getElementsByClassName('inline');
for (var element of elements)
if (element.action.indexOf('/IESC') != -1 && element.action.indexOf('start') != -1) {
element.children[0].children[0].classList.add("IESC_Start");
}
});
try {
await page.click('.IESC_Start');
} catch (e) {
console.log('No Start btn');
}
await browser.close();
})();