तो मुझे यकीन नहीं है कि यह व्यावहारिक रूप से मान्य है, लेकिन यह सोच रहा था कि सेलेनियम में https://www.coingecko.com/en /एक्सचेंज, एक्सचेंज लिंक के माध्यम से पुनरावृति करें, उनमें से प्रत्येक पर जाएं, फिर उन नए खुले पृष्ठों में से प्रत्येक के बारे में टैब पर क्लिक करें क्योंकि उनमें निकाली जाने वाली जानकारी होती है। कोड वास्तव में आधे रास्ते तक काम करता था जब यह StaleElementException और elementNotFound के माध्यम से टैब को ठीक से पहचानने में विफल रहा जैसा कि मैंने इसे driver.find_element_by_text के माध्यम से किया था।

समस्या यह है कि 'अबाउट' टैब एक पेज से दूसरे पेज में बदल जाता है, इसलिए यह या तो //ul[@role='tablist']/li[3] या li[2] है, और इसलिए मैं कोशिश कर रहा हूं प्रतीक्षा करें और उसके href मान के आधार पर सही तत्व पर क्लिक करें। ऐसा इसलिए है क्योंकि पृष्ठ href के मान के टैग में से एक में # about ---> //ul[@role='tablist']/li[3]/a टेक्स्ट है

क्षमा करें अगर यह सीधा नहीं था लेकिन मैं यह इंगित करने की कोशिश कर रहा था कि हाल ही में समस्या क्या थी :)

यह वह कोड है जिसे मैंने अभी तक प्रयास किया है अगर कोई मुझे सही दिशा में कृतज्ञतापूर्वक इंगित कर सकता है

from selenium.webdriver import Chrome
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
import time
from selenium.common.exceptions import NoSuchElementException, ElementNotVisibleException



webdriver = '/Users/karimnabil/projects/selenium_js/chromedriver-1'

driver = Chrome(webdriver)

num_of_pages = 4
exchanges_list = []
names_list = []
websites_list = []
emails_list = []
years_list = []
countries_list = []
twitter_list = []


for i in range(num_of_pages):

    url = 'https://www.coingecko.com/en/exchanges?page=' + str(i+1)
    driver.get(url)

    links = driver.find_elements_by_xpath("//tbody[@data-target='exchanges-list.tableRows']/tr/td[2]/div/span[2]/a")
    links = [url.get_attribute('href') for url in links]
    time.sleep(0.5)

    for link in links:
        driver.get(link)

        wait = WebDriverWait(driver, 2)
        



        wait.until(EC.text_to_be_present_in_element_value((By.XPATH, "//ul[@role='tablist']/li[position()=2 or position()=3]/a"), '#about'))
       

        try:
            name = driver.find_element_by_xpath("//div[@class='exchange-details-header-content']/div/h1").text
            website = driver.find_element_by_xpath("//div[@class='row no-gutters']/div[8]/a").get_attribute('href')
            email = driver.find_element_by_xpath("//div[@class='row no-gutters']/div[9]/a").get_attribute('href')
            year_est = driver.find_element_by_xpath("//div[@class='row no-gutters']/div[10]").text
            inc_country = driver.find_element_by_xpath("//div[@class='row no-gutters']/div[12]").text
            twitter = driver.find_element_by_xpath("//div[@class='row no-gutters']/div[16]/div[2]/div[2]/a").get_attribute('title')
        except:
            pass
        try:
            print('---------------')
            print('exchange name is : {}'.format(name))
            print('exchange website is : {}'.format(website))
            print('exchange email is : {}'.format(email))
            print('exchange established in year: {}'.format(year_est))
            print('exchange incorporated in : {}'.format(Inc_country))
            print('exchange twitter handle is: {}'.format(twitter))
        except:
            pass

        try:
            names_list.append(name)
            websites_list.append(website)
            emails_list.append(email)
            years_list.append(year_est)
            countries_list.append(Inc_country)
            twitter_list.append(twitter)
        except:
            pass
        

df = pd.DataFrame(list(zip(names_list, websites_list,emails_list, years_list, countries_list, twitter_list)), columns=['Ex_Names', 'Website', 'Support Email', 'Inc Year', 'Inc Country', 'Twitter Handle' ])

CoinGecko2_data = df.to_csv('CoinGecko4.csv', index=False) 
0
Karim Nabil 26 अगस्त 2020, 02:19

2 जवाब

सबसे बढ़िया उत्तर

यदि आप href जानते हैं तो बस प्रतीक्षा करें: //a[contains(@href, 'my-href')]

1
pguardiario 26 अगस्त 2020, 10:38

अगर कोई है तो मैं मुकदमा नहीं कर रहा हूं लेकिन आप अपना कस्टम प्रतीक्षा बना सकते हैं। यहाँ एक उदाहरण है:

https://seleniumbyexamples.github.io/waitcustom

0
slackingslacker 26 अगस्त 2020, 06:05