ablajan 发表于 2021-6-26 14:28

Selenium如何执行script脚本语言

我的代码最后几行是这样的:
      self.bro.find_element_by_xpath('//*[@id="lx-box-id"]/li/a').click()
      time.sleep(1)
      with open("code.txt", "r",encoding='utf-8') as f:
            code = f.read()
      webdriver.Chrome.execute_script(code)


目的就是selenium到达我想要的页面,然后执行code.txt里保存好的代码。
但是提示:
TypeError: execute_script() missing 1 required positional argument: 'script'

如何让code.txt里面的代码执行到页面呢?

Hangjau 发表于 2021-6-26 15:28

https://zhuanlan.zhihu.com/p/369363558   看这个你的文本应该是个js的后缀

kof21411 发表于 2021-6-26 16:38

请把code.txt的内容也发一下

ablajan 发表于 2021-6-26 17:24

kof21411 发表于 2021-6-26 16:38
请把code.txt的内容也发一下

code.txt的内容

var answer = [];
var times = 0;
var totalTimes = 0;

var Next = function () {
    var questionId = answer['questionId']
    console.log("questionId", questionId)
    // $(``).click();
    $(`li`).children('a').get(0).click()
    setTimeout(
      function () {
            var strAns = answer['answerNo'];
            var arrA = strAns.split('');
            for (a of arrA) {
                if(a == 1){
                  a = 'A'
                }
                if(a == 0){
                  a = 'B'
                }
                $('input').click()
            }
            times += 1;
            if (times < totalTimes) {
                Next();
            }
            else {
                console.debug('完成');
            }
      }, 1000); //等待1000毫秒, 如果网速不好适当增加这里的值;
};
var getCookie = function(name) {
    var v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
    return v ? v : null;
}
var start = function () {
    console.debug('开始');
    let paperId = $('#hid').attr('value')
    let seriesId = getCookie(`ex_range_${paperId}`)
    let answerUrl = `http://www.faxuanyun.com/ess/service/getpaper?paperId=${paperId}&series=${seriesId}_answer`
    fetch(answerUrl, {
      "headers": {
            "cache-control": "no-cache",
            "pragma": "no-cache",
            "upgrade-insecure-requests": "1"
      },
      "referrerPolicy": "strict-origin-when-cross-origin",
      "body": null,
      "method": "GET",
      "mode": "no-cors",
      "credentials": "include"
    }).then(res => res.text()).then(body => {
      console.log("test", body);
                if (!body) {
                        console.log('响应结果异常!')
                        return;
                }
      let answerString = body.split("\n");
      answer = JSON.parse(answerString);
      totalTimes = answer.length;
      Next();
    });
}
start();

yike911 发表于 2021-6-26 18:05

ablajan 发表于 2021-6-26 18:12

yike911 发表于 2021-6-26 18:05
目测是自动答题js。。。

就是,为了让我媳妇答题得分,我也是拼了。。。。。。

kof21411 发表于 2021-6-26 18:34

ablajan 发表于 2021-6-26 17:24
code.txt的内容

var answer = [];


改为这样
self.bro.find_element_by_xpath('//*[@id="lx-box-id"]/li/a').click()
time.sleep(1)
with open("code.txt", "r",encoding='utf-8') as f:
        lines = f.readlines()
        code = "".join(lines)
webdriver.Chrome.execute_script(code)

ablajan 发表于 2021-6-26 19:41

本帖最后由 ablajan 于 2021-6-26 19:42 编辑

kof21411 发表于 2021-6-26 18:34
改为这样

按你说的修改,还是一楼的提示。
所以我改成了这样
      
def script(self,code):
                with open("code.txt", "r",encoding='utf-8') as f:
                lines = f.readlines()
                code = "".join(lines)
                return webdriver.Chrome.execute_script(code)

提示倒是没有了,但浏览器毫无反应。我想code.txt里的代码运行到浏览器,code.txt里的代码本来是chrome的控制台console里面运行的代码,python这样导入应该是不对的,不知道有没有别的办法,比如python能否实现打开控制台console然后粘贴这些代码?{:1_924:}

kof21411 发表于 2021-6-26 19:47

ablajan 发表于 2021-6-26 19:41
按你说的修改,还是一楼的提示。
所以我改成了这样
      


你把code.txt文件里的注释内容全部删了//开头的内容

ablajan 发表于 2021-6-26 20:00

kof21411 发表于 2021-6-26 19:47
你把code.txt文件里的注释内容全部删了//开头的内容

删除了2处的注释部分,还是一样,浏览器没有任何反应,pycharm没有任何提示。。。
页: [1] 2
查看完整版本: Selenium如何执行script脚本语言