Advertisement
Guest User

Untitled

a guest
Jul 19th, 2019
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.78 KB | None | 0 0
  1.  
  2. // load puppeteer
  3. const puppeteer = require('puppeteer')
  4. const fs = require('fs')
  5. const url = 'https://clinicfinder.shoppersdrugmart.ca/';
  6.  
  7. void (async () => {
  8.  
  9. try {
  10. // create new browser instance
  11. const browser = await puppeteer.launch({
  12. headless: false
  13. /*
  14. slowMo: 150
  15. */
  16. })
  17. // create a page inside the browser
  18. const page = await browser.newPage()
  19. // allow only 'document' type requests
  20. /*
  21. await page.setRequestInterception(true);
  22. page.on('request', (request) => {
  23. if (request.resourceType() === 'document') {
  24. request.continue();
  25. } else {
  26. request.abort();
  27. }
  28. });
  29. */
  30. // navigate to a website
  31.  
  32. await page.goto(url, {
  33. waitUntil: 'networkidle2',
  34. timeout: 3000000
  35. });
  36.  
  37. // problems here ....
  38.  
  39. // enter data for location and wait for navigation
  40. const [response1] = await Promise.all([
  41. await page.waitForSelector('#search-input'),
  42. await page.focus('#search-input'),
  43. await page.keyboard.type('Montreal'),
  44. page.keyboard.press('Enter')
  45. ])
  46.  
  47.  
  48. await page.focus('#search-input')
  49. const [response2] = await Promise.all([
  50. page.waitForNavigation({ waitUntil: 'networkidle0' }),
  51. page.click('#search-button'),
  52. ])
  53. const [response3] = await Promise.all([
  54. page.waitForNavigation({ waitUntil: 'networkidle0' }),
  55. page.keyboard.press('Enter')
  56. ])
  57.  
  58. // the following is not finished ...
  59. /*
  60. // grab the mydata on loop
  61. const mydata = awaits page.evaluate(() => {
  62. // helper function grabFromRow
  63. const grabFromRow = (row, classname) => row
  64. .querySelector('td.${classname}')
  65. .innerText
  66. .trim()
  67.  
  68. // our selectors
  69. const MYDATA_ROW_SELECTOR = 'xx.zzzz'
  70. // array to store the data
  71. const adata = []
  72. // get number of rows
  73. const dataRows = document.query.SelectorAll(MYDATA_ROW_SELECTOR)
  74.  
  75. // loop over for each row getting data - this is example to modify
  76.  
  77. for (const tr of dataRows) {
  78. adata.push ({
  79. name: grabFromRow (tr, 'name'),
  80. addres1: grabFromRow (tr, 'addres1'),
  81. city: grabFromRow (tr, 'city'),
  82. province: grabFromRow (tr, 'province'),
  83. postal: grabFromRow (tr, 'postal'),
  84. phone: grabFromRow (tr, 'phone') // .... etc
  85. })
  86. }
  87. // return data to mydata variable
  88. return adata
  89. }
  90.  
  91.  
  92. // save data as JSON
  93.  
  94. fs.writeFile(
  95. './json/mydata.json',
  96. JSON.stringify(mydata, null, 2),
  97. (err) => err ? console.error('Data not saved!', err):console.log('Data saved OK.')
  98. )
  99. */
  100. // all done, close this browser
  101. await browser.close()
  102.  
  103. } catch (error) {
  104.  
  105. // if something went wrong display the error
  106. console.log(error)
  107. }
  108.  
  109. })()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement