有没有加快dryscrape eval_script()执行的方法?

问题描述:

我刮使用dryscrape网页(因为我需要的JavaScript渲染的部分),我使用eval_script(),以抑制一些基于JavaScript错误的网页上检查。我禁止的这个脚本基本上是一个我需要避免的onkeyup监听器,因为它使得用户只需从下拉列表中选择选项就是必需的。 这就是eval脚本 -有没有加快dryscrape eval_script()执行的方法?

session.eval_script("$('#input_elem').removeAttr('onblur onclick onkeyup');") 

现在整体拼抢花费更长的时间比我在不需要任何JavaScript修改同一个域中的其他实现页面的(因此没有eval_script() )。

我用time.time()做了一些分析,看看脚本在哪里放缓,而且确实需要花费很长时间在eval_script()步骤上。下面是结果 -

Starting to access at 0.00997018814087 
Visited page https://*****/***.aspx 1.30053019524 
First eval script run done 5.97628307343 
Second eval script run done 9.61053919792 
xpath 1 9.6632771492 
xpath 2 9.7702870369 
xpath 3 9.90402317047 
xpath of button to be clicked 9.91756606102 
Button clicked 9.97191905975 
Second page visited 10.4508111477 
Loop 1 else 10.4525721073 
xpath 4 10.5330061913 
xpath 5 10.6111950874 
xpath 6 10.6918411255 
xpath 7 10.7721481323 
Range begins 10.8208150864 
3 
Range ends 13.0008580685 

虽然当我循环通过表元素,它正在约2秒,但两个eval_script()步骤,组合,正在服用约8秒。 当我在Chrome开发工具控制台中这样做时,相同的脚本立即运行。 为什么dryscrape实施需要这么多时间?

使用jQuery在eval_script()似乎是罪魁祸首。我能显著降低脚本执行时间使用普通的JavaScript -

session.eval_script("document.getElementById('input_elem')").removeAttribute('onblur'); 

我不得不用两行两个单独的属性除去步骤在相同的元素。

这些都是我的分析日志现在 -

Starting to access at 0.0151550769806 
Visited page https://*****/***.aspx 1.73412919044 
First eval script run done 1.77594304085 
First eval script part 2 run done 1.81522011757 
Second eval script run done 1.85607099533 
xpath 1 1.94704914093 
xpath 2 2.03846216202 
xpath 3 2.13886809349 
xpath of button to be clicked 2.26395010948 
Button clicked 2.27277112007 
Second page visited 3.30618906021 
Loop 1 else 3.38708400726 
xpath 4 3.46828198433 
xpath 5 3.54840707779 
xpath 6 3.63034701347 
xpath 7 3.7106590271 
Range begins 3.75155210495 
3 
Range ends 5.91926407814 

即使是现在,在range循环的每一步走约0.7秒,这我的目标,以进一步降低。