我正在构建一个刮板,但是我一直坚持遍历 elementHandles。
我需要获取我成功执行的行元素列表。之后,对于每一行,我需要捕获 tds text/innerHTML(不确定哪个是哪个)。现在,将它们打印在标准输出中会很棒。
我得到的错误是UnhandledPromiseRejectionWarning: TypeError: tds.forEach is not a function,通过我的谷歌搜索告诉我 tds 不是数组。
我能够在 python 和 selenium 中实现这一点,但由于我是 javascript 新手,我预计我做错了什么。
根据我的理解,element.$$('td')返回一个 Promise,但如果我放置 await,我会得到SyntaxError: await is only valid in async function
const selectors = await page.$$('#transactionItems > tbody > tr');
console.log(selectors.length); // outputs 31 which is the right number
selectors.forEach( (element) => {
let tds = element.$$('td');
console.log(tds);
tds.forEach( (element) => {
console.log(element.innerText)
});
});
Run Code Online (Sandbox Code Playgroud)
编辑:
我已经尝试了以下代码,它成功地打印了它,但这仍然不是我想要的。
const selectors = await page.$$('#transactionItems > tbody > …Run Code Online (Sandbox Code Playgroud) 假设我有以下元组列表列表:
tuples = [
[
('2017-04-11', '2000000.00'),
('2017-04-12', '1000000.00'),
('2017-04-13', '3000000.00')
],
[
('2017-04-12', '472943.00'),
('2017-04-13', '1000000.00')
]
# ...
]
Run Code Online (Sandbox Code Playgroud)
我将如何根据第一个元素(日期)对它们进行分组并添加另一个元素。
例如,我想要这样的东西:
tuples = [('2017-04-11', '2000000.00'), ('2017-04-12', '1472943.00'), ('2017-04-13', '4000000.00')],
Run Code Online (Sandbox Code Playgroud) 这是我的main.py,我想在等号后提取所有内容.
示例网址将是
/loggedin?frob=72157645687641769-37c9ec9b8fb35d48-125787757
,我想提取72157645687641769-37c9ec9b8fb35d48-125787757
import webapp2
from flickr.views import Flickr, FlickrAuthorized
class MainHandler(webapp2.RequestHandler):
def get(self):
self.response.write('Hello world!')
app = webapp2.WSGIApplication([
('/', MainHandler),
('/index', Flickr),
(r'/loggedin?frob=<:((?:[a-z][a-z]*[0-9]+[a-z0-9]*))>', FlickrAuthorized)
], debug=True)
Run Code Online (Sandbox Code Playgroud)
我的处理程序有以下类:
class FlickrAuthorized(webapp2.RequestHandler):
def get(self, frob):
print frob
//code
Run Code Online (Sandbox Code Playgroud)