За последние 24 часа нас посетил 20751 программист и 1134 робота. Сейчас ищут 336 программистов ...

Парсить сайт плагином браузера

Тема в разделе "JavaScript и AJAX", создана пользователем Blackcement, 21 сен 2019.

  1. Blackcement

    Blackcement Новичок

    С нами с:
    21 сен 2019
    Сообщения:
    1
    Симпатии:
    0
    Здравствуйте.
    Возникла необходимость создать плагин для браузера, с помощью которого требуется получать данные с чужого сайта и обрабатывать их. Ничего незаконного и паразитного, просто расчёты (числа, суммы, средние арифметические и т.д). Но пока тренеруюсь на HTML тегах. Использую браузер Opera последней версии. В работе плагина используется JavaScrypt, поэтому думаю, что форумом не ошибся.
    Плагин состоит из трёх файлов:
    manifest.json
    Код (Text):
    1.  
    2. {
    3.     "manifest_version": 2,
    4.     "name": "TEST 1",
    5.     "description": "Test",
    6.     "version": "1.0",
    7.     "background": {    },
    8.     "permissions": ["tabs","http://*/*"],
    9.  
    10.     "sidebar_action":
    11.     {
    12.     "default_icon": "icon.png",
    13.     "default_title": "My Sample Extension",
    14.     "default_panel": "panel.html"
    15.     }
    16. }
    panel.html Панель(страница) плагина, на которую будем выводить информацию с сайтов
    HTML:
    1.     <head>
    2.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    3.         <title>Мой плагин</title>
    4.         <script src="background.js" type="text/javascript"></script>
    5.     </head>
    6.     <body>
    7.         <div id="timer">00</div>
    8.         <br>
    9.         <div id="lght_1">00</div>
    10.         <div id="txt_1">00</div>
    11.         <div id="tt_1">00</div>
    12.         <br>
    13.         <div id="lght_2">00</div>
    14.         <div id="lght_2_1">00</div>
    15.         <div id="txt_2">00</div>
    16.         <div id="tt_2">00</div>
    17.         <br>
    18.         <div id="lght_3">00</div>
    19.         <div id="txt_3">00</div>
    20.         <div id="tt_3">00</div>
    21.     </body>
    22. </html>
    background.js Ну и сам скрипт, который будет должен парсить сайты, пробую это делать тремя способами

    Код (Javascript):
    1. sec = 0;
    2. setInterval(tick, 1000);
    3.        
    4. function tick()
    5. {
    6.     var $ = window.jQuery;
    7.     sec++;
    8.     document.getElementById("timer").childNodes[0].nodeValue = sec; //Таймер отрабатывает
    9.  
    10.     /// TEST-1 [querySelector]
    11.     chrome.tabs.executeScript(null, {code: "document.querySelector('p').innerHTML"},
    12.     (results)=>    {document.getElementById("txt_1").childNodes[0].nodeValue = "Текст " + results;}); //Возвращает текст между первыми тегами <p></p> Тут всё ок
    13.  
    14.     /// TEST-2 [querySelectorAll]
    15.  
    16.     chrome.tabs.executeScript(null, {code: "document.querySelectorAll('p').length"},
    17.     (results)=>    {document.getElementById("lght_2").childNodes[0].nodeValue = "Длина массива " + results;}); //Возвращает правильное значение, Тут всё ок
    18.  
    19.     //А вот так, уже не работает:
    20.     chrome.tabs.executeScript(null, {code: "document.querySelectorAll('p')"},
    21.     (results)=>    {
    22.         document.getElementById("lght_2_1").childNodes[0].nodeValue = "Длина массива " + results.length;
    23.         console.log(results);//В консоли возвращает какой-то странный массив и как с ним работать мне не понятно  
    24.  
    25.         });
    26.  
    27.     chrome.tabs.executeScript(null, {code: "document.querySelectorAll('p').innerHTML"},
    28.     (results)=>    {document.getElementById("txt_2").childNodes[0].nodeValue = "Текст " + results[0];}); //Возвращает null
    29.  
    30.  
    31.     /// TEST-3 [jQuery]
    32.     //тут тоже возвращаются какие-то странные массивы, но тоже хочу разобраться, по этому прошу помощи
    33.     chrome.tabs.executeScript(null, {code: "$('p')"},
    34.     (results)=>
    35.     {
    36.         document.getElementById("lght_3").childNodes[0].nodeValue = "Длина массива " + results.length;
    37.         document.getElementById("txt_3").childNodes[0].nodeValue = results[0];
    38.      
    39.     });
    40.  
    41. };  
    Вот возвращаемый массив: в TEST-2
    Код (Text):
    1.  
    2.  
    3. [I][B]Array(1)
    4. 0: {}
    5. length: 1
    6. __proto__: Array(0)
    7. concat: ƒ concat()
    8. constructor: ƒ Array()
    9. copyWithin: ƒ copyWithin()
    10. entries: ƒ entries()
    11. every: ƒ every()
    12. fill: ƒ fill()
    13. filter: ƒ filter()
    14. find: ƒ find()
    15. findIndex: ƒ findIndex()
    16. flat: ƒ flat()
    17. flatMap: ƒ flatMap()
    18. forEach: ƒ forEach()
    19. includes: ƒ includes()
    20. indexOf: ƒ indexOf()
    21. join: ƒ join()
    22. keys: ƒ keys()
    23. lastIndexOf: ƒ lastIndexOf()
    24. length: 0
    25. map: ƒ map()
    26. pop: ƒ pop()
    27. push: ƒ push()
    28. reduce: ƒ reduce()
    29. reduceRight: ƒ reduceRight()
    30. reverse: ƒ reverse()
    31. shift: ƒ shift()
    32. slice: ƒ slice()
    33. some: ƒ some()
    34. sort: ƒ sort()
    35. splice: ƒ splice()
    36. toLocaleString: ƒ toLocaleString()
    37. toString: ƒ toString()
    38. unshift: ƒ unshift()
    39. values: ƒ values()
    40. Symbol(Symbol.iterator): ƒ values()
    41. Symbol(Symbol.unscopables): {copyWithin: true, entries: true, fill: true, find: true, findIndex: true, …}
    42. __proto__: Object[/B][/I]
    Помогите, люди добрые, уже второй день бьюсь.
     
    #1 Blackcement, 21 сен 2019
    Последнее редактирование: 21 сен 2019