Selenium处理弹出窗口和Google自动填充功能

时间:2016-05-25 04:42:25

标签: python selenium web-scraping geocoding

我正在尝试使用selenium从http://www.gps-coordinates.net/进行网页抓取,我在2个方面遇到问题。

  1. Google自动填充功能导致我无法点击“获取” 坐标'按钮。我试图解决它,但有时它仍然 不起作用。 (消息:元素在点(280,17.800003051757812)不可点击。其他元素将收到点击)
  2. 弹出表示没有可用的结果,但我仍然无法处理弹出窗口。
  3. `

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support import expected_conditions as EC
    import openpyxl
    import xlsxwriter
    import pyperclip
    
    driver = ""
    
    def setup():
        global driver
        driver = webdriver.Firefox()
        driver.get("http://www.gps-coordinates.net/")
        assert 'Google Map' in driver.title
    
    def sele(address):
        setup()
        global driver
        query = driver.find_element_by_id('address')
        query.clear()
        query.send_keys(address)
        query.send_keys(Keys.RETURN)
        driver.implicitly_wait(0.7)
        query.send_keys(Keys.DOWN) #To solve in case there is autocomplete by Google
        query.send_keys(Keys.RETURN)
        button = driver.find_element_by_xpath("//*[@id='wrap']/div[2]/div[4]/div[1]/form[1]/div[2]/div/button")
        button.click()
        driver.implicitly_wait(0.7)
        if EC.alert_is_present(): #If there is a popup, that means there is no result for the geocoding
            alert=driver.switch_to_alert()
            alert.accept()
            latlong = ['Fail','Fail']
            return latlong
        else:  
            latraw = driver.find_element_by_id('latitude')  
            longraw = river.find_element_by_id('longitude')  
            latraw.send_keys(Keys.CONTROL,'A')  
            latraw.send_keys(Keys.CONTROL,'C')
            lat = pyperclip.paste()
            latraw.clear()
            longraw.send_keys(Keys.CONTROL,'A')
            longraw.send_keys(Keys.CONTROL,'C')
            long = pyperclip.paste()
            latraw.clear()
            return [lat,long]
    

1 个答案:

答案 0 :(得分:1)

我用这段代码解决了我的问题:

name : Psi+
version : 1.1
os : Windows XP
相关问题