Как закрыть новую вкладку, которая открылась с помощью опции щелчка?

Я пытаюсь использовать Selenium для очистки веб-сайта электронной коммерции www.flipkart.com Вот шаги, которые я пытаюсь выполнить:

1. Open Flipkart
2. Close the pop-up login prompt
3. Go to the Search Menu
4. Search for a keyword "Laptop"8/*/-
5. Click on the Search button
6. Open every record as a new tab and scrape information from it.
7. After scraping close the newly opened tab and go to the parent tab.
8. Repeat Steps for all the records on the page.
9. After getting all the records from one page go to the next page and repeat steps.

Проблема с моим кодом заключается в том, что я не могу закрыть вновь открытую вкладку с шага 6.

driver=webdriver.Chrome()
driver.get("http://www.flipkart.com")

#Close pop us
elem=driver.find_element_by_xpath("/html/body/div[2]/div/div/button")
elem.click()

#click on search field
#1
elem=driver.find_element_by_xpath("xpath_tag_too_long_to_add")
elem.send_keys("Laptop")

#search
#2
elem=driver.find_element_by_xpath("xpath_tag_too_long_to_add")
elem.click()
time.sleep(10)

#get the maximum page number
y=int(driver.find_element_by_css_selector('div._2zg3yZ').text[10:12])

#scrape pages
name=[]
price=[]
color=[]
for i in range(1,y+1):
    driver.get(link+str(i))
    x=driver.find_elements_by_css_selector('div._3wU53n')
    for i in x:
       i.click()
       actions = ActionChains(driver)      
       driver.switch_to.window(driver.window_handles[1])
       time.sleep(2)
       #3
       names=driver.find_element_by_xpath('xpath_tag_too_long_to_add').text
       name.append(name)
       #4
       prices=driver.find_element_by_xpath('xpath_tag_too_long_to_add').text
       price.append(prices)
       #5
       colors=driver.find_element_by_xpath('xpath_tag_too_long_to_add').text
       color.append(colors)
       driver.switch_to.window(driver.window_handles[0])

Я пробовал такие вещи, как клавиши действий, чтобы закрыть вкладку, но это не сработало. Проблема, которую я получаю из-за того, что не закрываю вновь открытую вкладку, заключается в том, что когда я использую switch_to.window, она продолжает перемещаться вперед и назад с родительской страницей, а первая открытая страница дает мне одно и то же значение во всех столбцах.

      #this is what I have tried
      elem=driver.find_element_by_tag_name("body")
      elem.send_keys(Keys.CONTROL+"w")


     Here are the Xpath & Links:
     #1-/html/body/div[1]/div/div[1]/div[1]/div[2]/div[2]/form/div/div/input
     #2-/html/body/div[1]/div/div[1]/div[1]/div[2]/div[2]/form/div/button
     #3-/html/body/div[1]/div/div[3]/div[2]/div[1]/div[2]/div[2]/div/div[1]/h1/span
     #4-/html/body/div[1]/div/div[3]/div[2]/div[1]/div[2]/div[2]/div/div[3]/div[1]/div/div[1]
     #5-/html/body/div[1]/div/div[3]/div[2]/div[1]/div[2]/div[7]/div[3]
        /div/div[2]/div[1]/div[1]/table/tbody/tr[5]/td[2]/ul/li

ссылка-https://www.flipkart.com/search?q=laptop&otracker=search&otracker1=search&marketplace=FLIPKART&as-show=on&as=off&page=

Ссылка на веб-сайт: https://www.flipkart.com/

Спасибо за чтение.


person Nitin Kumar    schedule 07.06.2020    source источник
comment
Пожалуйста, взгляните на этот пост: stackoverflow.com/a/39037983/3079726. Он должен ответить на ваш вопрос.   -  person mchfrnc    schedule 07.06.2020


Ответы (1)


Когда вы откроете Flipkart с помощью get(), сохраните дескриптор родительского окна, т. е. current_window_handle

driver.get("https://www.flipkart.com")
parent_window  = driver.current_window_handle

Далее в цикле for(), как только вы добавите цвета, close() соседняя новая вкладка, а затем переключитесь на родительское окно следующим образом:

for i in x:
    #previous lines of code
    #5
    color.append(colors)
    driver.close()
    driver.switch_to.window(parent_window)

Вы можете найти соответствующее обсуждение в Selenium Switch Tabs.

person DebanjanB    schedule 07.06.2020