Проблемы с выбором из выпадающего меню Google с помощью Selenium (Python) - PullRequest
1 голос
/ 20 апреля 2019

Я пытаюсь автоматизировать поиск на патентном веб-сайте Google с помощью Python. Вот ссылка на сайт https://patents.google.com/advanced Мне нужно выяснить, как выбрать из выпадающего меню. Например, в раскрывающемся меню Патентного ведомства мне нужно выбрать США в качестве страны.

Я попытался определить выпадающее меню с помощью Selenium find_element_ by_xpath. Следуя предложенным решениям на этом сайте, я попытался щелкнуть по меню, используя Selenium select_by visible_text. Мне не удалось.

Я новичок и в Python, и в html, поэтому любые подсказки будут высоко оценены. Вот код Python, который я пытался найти и выбрать США в качестве страны в раскрывающемся списке Патентного ведомства.

#Identify the dropdown menu for Patent Office

off_element=driver.find_element_by_xpath("//dropdown-menu[@change-action='RESTRICT_OFFICE_MENU']/iron-dropdown/div[@id='contentWrapper']/div[@id='menu']/div[@class='style-scope dropdown-menu']")


#Declare the dropdown as an instance of the Select class.

    patoff= Select(off_element)
    patoff.selectByVisibleText("US")

Вот ошибка, которую я получаю

"UnexpectedTagNameException: Message: Select работает только с выбранными элементами, а не с div"

Однако я не вижу элементов select в html-коде. Мой xpath неверен? Раскрывающийся список не виден? Ниже я вставил HTML-код для выпадающего меню. Я не был уверен, сколько деталей я должен предоставить, поэтому я скопировал весь путь. Список стран находится в самом низу. Спасибо!

<dropdown-menu show-label="true" multi="" label="Patent Office" change-action="RESTRICT_OFFICE_MENU" class="style-scope restrict-editor">

    <span class="label style-scope dropdown-menu">
      <span class="style-scope dropdown-menu">Patent Office</span>
      <span id="selected" class="style-scope dropdown-menu" hidden="">
        <span style="margin: 0px 4px 0px 2px" class="style-scope 
         dropdown-menu">·</span>
        <span class="style-scope dropdown-menu"></span>
      </span>
      <iron-icon icon="icons:arrow-drop-down" class="style-scope 
        dropdown-menu x-scope iron-icon-0"><svg viewBox="0 0 24 24" 
        preserveAspectRatio="xMidYMid meet" focusable="false" 
        class="style-scope iron-icon" style="pointer-events: none; 
        display: block; width: 100%; height: 100%;"><g class="style-          
        scope iron-icon"><path d="M7 10l5 5 5-5z" class="style-scope 
        iron-icon"></path></g></svg>    
  </iron-icon><iron-icon icon="icons:arrow-drop-up" class="style-scope 
    dropdown-menu x-scope iron-icon-0" hidden=""><svg viewBox="0 0 24 
    24" preserveAspectRatio="xMidYMid meet" focusable="false" 
    class="style-scope iron-icon" style="pointer-events: none; display: 
    block; width: 100%; height: 100%;"><g class="style-scope iron- 
    icon"><path d="M7 14l5-5 5 5z" class="style-scope iron-icon"> . 
    </path></g></svg>   
  </iron-icon>
    </span>
    <iron-dropdown allow-outside-scroll="" horizontal-align="left" 
     vertical-align="top" class="style-scope dropdown-menu" aria- 
     disabled="false" aria-hidden="true" style="outline: none; display: 
     none;"

    <div id="contentWrapper" class="style-scope iron-dropdown">
      <div class="dropdown-content style-scope dropdown-menu" 
         slot="dropdown-content" id="menu" multi="">
        <div class="style-scope dropdown-menu">

            <div class="item style-scope dropdown-menu">WO</div>

            <div class="item style-scope dropdown-menu">US</div>

            <div class="item style-scope dropdown-menu">EP</div>

            <div class="item style-scope dropdown-menu">JP</div>

            <div class="item style-scope dropdown-menu">KR</div>

            <div class="item style-scope dropdown-menu">CN</div>

            <div class="item style-scope dropdown-menu">AE</div>

1 Ответ

0 голосов
/ 28 апреля 2019

У меня работает следующий код с использованием драйвера Chrome:

import time

import urllib.request

import urllib.response

import re

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.by import By

from selenium.webdriver.support.select import Select

from selenium.webdriver.support.ui import Select

from selenium.webdriver.common.action_chains import ActionChains

import webbrowser

import requests, sys

import requests, csv

from lxml import html

import lxml.html

import requests

Chrome = webdriver.Chrome(executable_path='enter_your_driver_file_path_here')

url = "https://patents.google.com/advanced"

Chrome.get(url)

#Find Patent Office Menu.
patent_menu = Chrome.find_element_by_xpath("//*/span[@class='style-scope dropdown-menu' and text()='Patent Office']") 

#Open the Patent Office menu.
patent_menu.click() 

#Wait long enough for the patent menu to open, before selecting the country.
Chrome.implicitly_wait(10) 

#Find the patent country option, which in this case is the 'US'.
patent_country = Chrome.find_element_by_xpath("//*/div[@id='menu']/div[@class='style-scope dropdown-menu']/div[@class='item style-scope dropdown-menu' and text()='US']")

#Select the patent country option, which in this case is the 'US'.
patent_country.click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...