Python + Selenium:元素不可见

时间:2017-12-20 11:40:57

标签: python selenium xpath

这是网页 - link。我要爬行(在波斯语中)。当我要点击下一页按钮时,我遇到了问题。 XPath是:

nextpage = '//*[@id="ctl00_ContentPlaceHolder1_ASPxSplitter1_CallbackPaneldgd_dgd_DXPagerBottom"]/a[1]/img'
page = driver.find_element_by_xpath(nextpage)
page.click()

page.click()后我收到以下错误:

selenium.common.exceptions.ElementNotVisibleException: Message: element not visible

有些回答说可能存在重复的XPath,但我在网页的源代码中找不到这样的内容。

完整的代码:

import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains


driver = webdriver.Chrome(executable_path='./chromedriver')
url = 'http://hmi.mrud.ir/sabaa/SABAA/Home/Default.aspx?strTownship=0101&g=false'
driver.get(url) 
time.sleep(10)   
nextpage = '//*[@id="ctl00_ContentPlaceHolder1_ASPxSplitter1_CallbackPaneldgd_dgd_DXPagerBottom"]/a[1]/img'
page = driver.find_element_by_xpath(nextpage)
page.click()

感谢。

2 个答案:

答案 0 :(得分:1)

在点击元素之前使用以下内容:

driver.execute_script("arguments[0].scrollIntoView(true);", page)

这是滚动到元素。

希望它可以帮到你!

答案 1 :(得分:1)

根据Website,如果您想点击Next Page Button,则必须诱导WebDriverWait WebElement,以便可以按照以下任一代码块点击nextpage = WebDriverWait(driver, 10).until(EC.element_to_be_clickable(By.XPATH,"//div[@id='ctl00_ContentPlaceHolder1_ASPxSplitter1_CallbackPaneldgd_dgd_DXPagerBottom']/a[@class='dxp-lead dxp-button dxp-bi']/img[@class='dxWeb_pPrev_Aqua']")) nextpage.click() ,如下所示:

nextpage = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_xpath("//div[@id='ctl00_ContentPlaceHolder1_ASPxSplitter1_CallbackPaneldgd_dgd_DXPagerBottom']/a[@class='dxp-lead dxp-button dxp-bi']/img[@class='dxWeb_pPrev_Aqua']"))
nextpage.click()

或者

        $('.item-list').imagesLoaded(function () {

            var $grid = $('.item-list');

            $grid.isotope({
                itemSelector: '.item-list__card',
                percentPosition: true,

                masonry: {
                    columnWidth: '.grid-sizer'
                }
            });

            var iso = $grid.data('isotope');

            $grid.infiniteScroll({
                    path: '.navigation a',
                    append: '.item-list__card',
                    debug: true,
                    status: '.infinite-scroll-request',
                    outlayer: iso
                }
            );
        });