Why using Selenium to scroll down and click the button sometimes fails to load all the page












0















I am trying to load the page with Selenium and parse it with Beautiful Soup. I have tried different ways to simulate the click on the load more button, only the code here works. [How to scroll down in Python Selenium step by step



read_mores = driver.find_elements_by_xpath('//*[@data-teach-id='+ tid + ']')
for read_more in read_mores:
driver.execute_script("arguments[0].scrollIntoView();", read_more)
driver.execute_script("$(arguments[0]).click();", read_more)
soup = BeautifulSoup(driver.page_source, 'html.parser')


However, it fails to load the whole page sometimes. I know probably "clickandwait" will work but have no idea where to put in the code. I would also love to know if there is other way to deal with it. Any help would be greatly appreciated!










share|improve this question























  • Is there an URL you can share?

    – QHarr
    Nov 21 '18 at 7:19
















0















I am trying to load the page with Selenium and parse it with Beautiful Soup. I have tried different ways to simulate the click on the load more button, only the code here works. [How to scroll down in Python Selenium step by step



read_mores = driver.find_elements_by_xpath('//*[@data-teach-id='+ tid + ']')
for read_more in read_mores:
driver.execute_script("arguments[0].scrollIntoView();", read_more)
driver.execute_script("$(arguments[0]).click();", read_more)
soup = BeautifulSoup(driver.page_source, 'html.parser')


However, it fails to load the whole page sometimes. I know probably "clickandwait" will work but have no idea where to put in the code. I would also love to know if there is other way to deal with it. Any help would be greatly appreciated!










share|improve this question























  • Is there an URL you can share?

    – QHarr
    Nov 21 '18 at 7:19














0












0








0








I am trying to load the page with Selenium and parse it with Beautiful Soup. I have tried different ways to simulate the click on the load more button, only the code here works. [How to scroll down in Python Selenium step by step



read_mores = driver.find_elements_by_xpath('//*[@data-teach-id='+ tid + ']')
for read_more in read_mores:
driver.execute_script("arguments[0].scrollIntoView();", read_more)
driver.execute_script("$(arguments[0]).click();", read_more)
soup = BeautifulSoup(driver.page_source, 'html.parser')


However, it fails to load the whole page sometimes. I know probably "clickandwait" will work but have no idea where to put in the code. I would also love to know if there is other way to deal with it. Any help would be greatly appreciated!










share|improve this question














I am trying to load the page with Selenium and parse it with Beautiful Soup. I have tried different ways to simulate the click on the load more button, only the code here works. [How to scroll down in Python Selenium step by step



read_mores = driver.find_elements_by_xpath('//*[@data-teach-id='+ tid + ']')
for read_more in read_mores:
driver.execute_script("arguments[0].scrollIntoView();", read_more)
driver.execute_script("$(arguments[0]).click();", read_more)
soup = BeautifulSoup(driver.page_source, 'html.parser')


However, it fails to load the whole page sometimes. I know probably "clickandwait" will work but have no idea where to put in the code. I would also love to know if there is other way to deal with it. Any help would be greatly appreciated!







python selenium web-scraping beautifulsoup






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 21 '18 at 7:14









ChloeChloe

32




32













  • Is there an URL you can share?

    – QHarr
    Nov 21 '18 at 7:19



















  • Is there an URL you can share?

    – QHarr
    Nov 21 '18 at 7:19

















Is there an URL you can share?

– QHarr
Nov 21 '18 at 7:19





Is there an URL you can share?

– QHarr
Nov 21 '18 at 7:19












1 Answer
1






active

oldest

votes


















0














I recommend to do:



driver.execute_script("document.querySelector('[data-teach-id="" + tid + ""]').click()")


Rather than select in selenium and pass the element to the browser context, do it all in the browser context. Less possiblity for things to go horribly wrong that way.



Just to get fancy...



Let's abstract the click to a function (I think I'll do this from now on):



def click(css):
global driver
driver.execute_script("document.querySelector('" + css + "').click()")


Now we can do:



click('a[data-teach-id="' + tid + '"]')


Ah, much less painful.






share|improve this answer
























  • Thanks a lot! But it fails to load the whole page...

    – Chloe
    Nov 21 '18 at 16:21











  • @Chloe Is it just loading some of the content thus pushing the page lower and you would have to click it again? If so, then run that in a loop. If the element is visible while you can click it then use that for your conditions.

    – Kamikaze_goldfish
    Nov 21 '18 at 21:40











  • Sorry, without an url I can't see what's going on there.

    – pguardiario
    Nov 21 '18 at 23:59











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53406956%2fwhy-using-selenium-to-scroll-down-and-click-the-button-sometimes-fails-to-load-a%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









0














I recommend to do:



driver.execute_script("document.querySelector('[data-teach-id="" + tid + ""]').click()")


Rather than select in selenium and pass the element to the browser context, do it all in the browser context. Less possiblity for things to go horribly wrong that way.



Just to get fancy...



Let's abstract the click to a function (I think I'll do this from now on):



def click(css):
global driver
driver.execute_script("document.querySelector('" + css + "').click()")


Now we can do:



click('a[data-teach-id="' + tid + '"]')


Ah, much less painful.






share|improve this answer
























  • Thanks a lot! But it fails to load the whole page...

    – Chloe
    Nov 21 '18 at 16:21











  • @Chloe Is it just loading some of the content thus pushing the page lower and you would have to click it again? If so, then run that in a loop. If the element is visible while you can click it then use that for your conditions.

    – Kamikaze_goldfish
    Nov 21 '18 at 21:40











  • Sorry, without an url I can't see what's going on there.

    – pguardiario
    Nov 21 '18 at 23:59
















0














I recommend to do:



driver.execute_script("document.querySelector('[data-teach-id="" + tid + ""]').click()")


Rather than select in selenium and pass the element to the browser context, do it all in the browser context. Less possiblity for things to go horribly wrong that way.



Just to get fancy...



Let's abstract the click to a function (I think I'll do this from now on):



def click(css):
global driver
driver.execute_script("document.querySelector('" + css + "').click()")


Now we can do:



click('a[data-teach-id="' + tid + '"]')


Ah, much less painful.






share|improve this answer
























  • Thanks a lot! But it fails to load the whole page...

    – Chloe
    Nov 21 '18 at 16:21











  • @Chloe Is it just loading some of the content thus pushing the page lower and you would have to click it again? If so, then run that in a loop. If the element is visible while you can click it then use that for your conditions.

    – Kamikaze_goldfish
    Nov 21 '18 at 21:40











  • Sorry, without an url I can't see what's going on there.

    – pguardiario
    Nov 21 '18 at 23:59














0












0








0







I recommend to do:



driver.execute_script("document.querySelector('[data-teach-id="" + tid + ""]').click()")


Rather than select in selenium and pass the element to the browser context, do it all in the browser context. Less possiblity for things to go horribly wrong that way.



Just to get fancy...



Let's abstract the click to a function (I think I'll do this from now on):



def click(css):
global driver
driver.execute_script("document.querySelector('" + css + "').click()")


Now we can do:



click('a[data-teach-id="' + tid + '"]')


Ah, much less painful.






share|improve this answer













I recommend to do:



driver.execute_script("document.querySelector('[data-teach-id="" + tid + ""]').click()")


Rather than select in selenium and pass the element to the browser context, do it all in the browser context. Less possiblity for things to go horribly wrong that way.



Just to get fancy...



Let's abstract the click to a function (I think I'll do this from now on):



def click(css):
global driver
driver.execute_script("document.querySelector('" + css + "').click()")


Now we can do:



click('a[data-teach-id="' + tid + '"]')


Ah, much less painful.







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 21 '18 at 9:03









pguardiariopguardiario

36.4k980116




36.4k980116













  • Thanks a lot! But it fails to load the whole page...

    – Chloe
    Nov 21 '18 at 16:21











  • @Chloe Is it just loading some of the content thus pushing the page lower and you would have to click it again? If so, then run that in a loop. If the element is visible while you can click it then use that for your conditions.

    – Kamikaze_goldfish
    Nov 21 '18 at 21:40











  • Sorry, without an url I can't see what's going on there.

    – pguardiario
    Nov 21 '18 at 23:59



















  • Thanks a lot! But it fails to load the whole page...

    – Chloe
    Nov 21 '18 at 16:21











  • @Chloe Is it just loading some of the content thus pushing the page lower and you would have to click it again? If so, then run that in a loop. If the element is visible while you can click it then use that for your conditions.

    – Kamikaze_goldfish
    Nov 21 '18 at 21:40











  • Sorry, without an url I can't see what's going on there.

    – pguardiario
    Nov 21 '18 at 23:59

















Thanks a lot! But it fails to load the whole page...

– Chloe
Nov 21 '18 at 16:21





Thanks a lot! But it fails to load the whole page...

– Chloe
Nov 21 '18 at 16:21













@Chloe Is it just loading some of the content thus pushing the page lower and you would have to click it again? If so, then run that in a loop. If the element is visible while you can click it then use that for your conditions.

– Kamikaze_goldfish
Nov 21 '18 at 21:40





@Chloe Is it just loading some of the content thus pushing the page lower and you would have to click it again? If so, then run that in a loop. If the element is visible while you can click it then use that for your conditions.

– Kamikaze_goldfish
Nov 21 '18 at 21:40













Sorry, without an url I can't see what's going on there.

– pguardiario
Nov 21 '18 at 23:59





Sorry, without an url I can't see what's going on there.

– pguardiario
Nov 21 '18 at 23:59




















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53406956%2fwhy-using-selenium-to-scroll-down-and-click-the-button-sometimes-fails-to-load-a%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







這個網誌中的熱門文章

Xamarin.form Move up view when keyboard appear

Post-Redirect-Get with Spring WebFlux and Thymeleaf

Anylogic : not able to use stopDelay()