Selenium Dynamic data Select - Python
I'm trying to scrape https://sherwin.com.ar/hagalo-usted-mismo/Donde-compro and i want to retrieve every paint store in every district from every state. That is a dynamic element on the website, and i can't get any data out of it.
You have to select a State from a dropdown list, and then a district from another dropdown list. Then you have to submit the options with the button down bellow. After all that the data is displayed in a list beside a "map" (that it doesn't apear, don't know why). I need to get that data. But i have no idea what to do. The code i have at this moment is:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Chrome()
driver.get('https://sherwin.com.ar/hagalo-usted-mismo/Donde-compro')
provincias = driver.find_elements_by_xpath('//*[@id="ddlState"]/option')
provinciaSelect = Select(driver.find_element_by_xpath('//*[@id="ddlState"]'))
localidadSelect = Select(driver.find_element_by_xpath('//*[@id="ddlLocation"]'))
driver.implicitly_wait(2)
buscarPinturerias = driver.find_element_by_css_selector('#search_paint_shops')
for i in range(1,len(provincias)):
provinciaSelect.select_by_index(i)
driver.implicitly_wait(2)
for j in range(1, len(localidadSelect.options)):
localidadSelect.select_by_index(j)
print(i,j)
I am getting this error
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
That's how far i could get. I know i have to Submit the result and wait until the data apear. I don't know how to do that
UPDATE
I've updated the code to this:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome('')
driver.get('https://sherwin.com.ar/hagalo-usted-mismo/Donde-compro')
# all options of the dropdown list
provincias = driver.find_elements_by_xpath('//*[@id="ddlState"]/option')
provinciaSelect = Select(driver.find_element_by_xpath('//*[@id="ddlState"]'))
localidadSelect = Select(driver.find_element_by_xpath('//*[@id="ddlLocation"]'))
driver.implicitly_wait(2)
buscarPinturerias = driver.find_element_by_css_selector('#search_paint_shops')
for i in range(1, len(provincias)):
provinciaSelect.select_by_index(i)
elemLoc = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="ddlLocation"]/option[2]' )))
# to know in which state i am
print(i)
for j in range(1, len(localidadSelect.options)):
localidadSelect.select_by_index(j)
buscarPinturerias.submit()
elemRes = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="map_info"]/div' )))
resBlock = driver.find_element_by_xpath('//*[@id="map_info"]/div')
dataBlock = resBlock.find_elements_by_tag_name('li')
for l in dataBlock:
# I have the error here now
print(l.text.encode('utf-8'))
Now the problem is that if i make
print(l.text.encode('utf-8'))
it raises a
StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
is it because i don't wait enough?
web-scraping selenium-chromedriver python-3.6
add a comment |
I'm trying to scrape https://sherwin.com.ar/hagalo-usted-mismo/Donde-compro and i want to retrieve every paint store in every district from every state. That is a dynamic element on the website, and i can't get any data out of it.
You have to select a State from a dropdown list, and then a district from another dropdown list. Then you have to submit the options with the button down bellow. After all that the data is displayed in a list beside a "map" (that it doesn't apear, don't know why). I need to get that data. But i have no idea what to do. The code i have at this moment is:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Chrome()
driver.get('https://sherwin.com.ar/hagalo-usted-mismo/Donde-compro')
provincias = driver.find_elements_by_xpath('//*[@id="ddlState"]/option')
provinciaSelect = Select(driver.find_element_by_xpath('//*[@id="ddlState"]'))
localidadSelect = Select(driver.find_element_by_xpath('//*[@id="ddlLocation"]'))
driver.implicitly_wait(2)
buscarPinturerias = driver.find_element_by_css_selector('#search_paint_shops')
for i in range(1,len(provincias)):
provinciaSelect.select_by_index(i)
driver.implicitly_wait(2)
for j in range(1, len(localidadSelect.options)):
localidadSelect.select_by_index(j)
print(i,j)
I am getting this error
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
That's how far i could get. I know i have to Submit the result and wait until the data apear. I don't know how to do that
UPDATE
I've updated the code to this:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome('')
driver.get('https://sherwin.com.ar/hagalo-usted-mismo/Donde-compro')
# all options of the dropdown list
provincias = driver.find_elements_by_xpath('//*[@id="ddlState"]/option')
provinciaSelect = Select(driver.find_element_by_xpath('//*[@id="ddlState"]'))
localidadSelect = Select(driver.find_element_by_xpath('//*[@id="ddlLocation"]'))
driver.implicitly_wait(2)
buscarPinturerias = driver.find_element_by_css_selector('#search_paint_shops')
for i in range(1, len(provincias)):
provinciaSelect.select_by_index(i)
elemLoc = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="ddlLocation"]/option[2]' )))
# to know in which state i am
print(i)
for j in range(1, len(localidadSelect.options)):
localidadSelect.select_by_index(j)
buscarPinturerias.submit()
elemRes = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="map_info"]/div' )))
resBlock = driver.find_element_by_xpath('//*[@id="map_info"]/div')
dataBlock = resBlock.find_elements_by_tag_name('li')
for l in dataBlock:
# I have the error here now
print(l.text.encode('utf-8'))
Now the problem is that if i make
print(l.text.encode('utf-8'))
it raises a
StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
is it because i don't wait enough?
web-scraping selenium-chromedriver python-3.6
add a comment |
I'm trying to scrape https://sherwin.com.ar/hagalo-usted-mismo/Donde-compro and i want to retrieve every paint store in every district from every state. That is a dynamic element on the website, and i can't get any data out of it.
You have to select a State from a dropdown list, and then a district from another dropdown list. Then you have to submit the options with the button down bellow. After all that the data is displayed in a list beside a "map" (that it doesn't apear, don't know why). I need to get that data. But i have no idea what to do. The code i have at this moment is:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Chrome()
driver.get('https://sherwin.com.ar/hagalo-usted-mismo/Donde-compro')
provincias = driver.find_elements_by_xpath('//*[@id="ddlState"]/option')
provinciaSelect = Select(driver.find_element_by_xpath('//*[@id="ddlState"]'))
localidadSelect = Select(driver.find_element_by_xpath('//*[@id="ddlLocation"]'))
driver.implicitly_wait(2)
buscarPinturerias = driver.find_element_by_css_selector('#search_paint_shops')
for i in range(1,len(provincias)):
provinciaSelect.select_by_index(i)
driver.implicitly_wait(2)
for j in range(1, len(localidadSelect.options)):
localidadSelect.select_by_index(j)
print(i,j)
I am getting this error
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
That's how far i could get. I know i have to Submit the result and wait until the data apear. I don't know how to do that
UPDATE
I've updated the code to this:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome('')
driver.get('https://sherwin.com.ar/hagalo-usted-mismo/Donde-compro')
# all options of the dropdown list
provincias = driver.find_elements_by_xpath('//*[@id="ddlState"]/option')
provinciaSelect = Select(driver.find_element_by_xpath('//*[@id="ddlState"]'))
localidadSelect = Select(driver.find_element_by_xpath('//*[@id="ddlLocation"]'))
driver.implicitly_wait(2)
buscarPinturerias = driver.find_element_by_css_selector('#search_paint_shops')
for i in range(1, len(provincias)):
provinciaSelect.select_by_index(i)
elemLoc = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="ddlLocation"]/option[2]' )))
# to know in which state i am
print(i)
for j in range(1, len(localidadSelect.options)):
localidadSelect.select_by_index(j)
buscarPinturerias.submit()
elemRes = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="map_info"]/div' )))
resBlock = driver.find_element_by_xpath('//*[@id="map_info"]/div')
dataBlock = resBlock.find_elements_by_tag_name('li')
for l in dataBlock:
# I have the error here now
print(l.text.encode('utf-8'))
Now the problem is that if i make
print(l.text.encode('utf-8'))
it raises a
StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
is it because i don't wait enough?
web-scraping selenium-chromedriver python-3.6
I'm trying to scrape https://sherwin.com.ar/hagalo-usted-mismo/Donde-compro and i want to retrieve every paint store in every district from every state. That is a dynamic element on the website, and i can't get any data out of it.
You have to select a State from a dropdown list, and then a district from another dropdown list. Then you have to submit the options with the button down bellow. After all that the data is displayed in a list beside a "map" (that it doesn't apear, don't know why). I need to get that data. But i have no idea what to do. The code i have at this moment is:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Chrome()
driver.get('https://sherwin.com.ar/hagalo-usted-mismo/Donde-compro')
provincias = driver.find_elements_by_xpath('//*[@id="ddlState"]/option')
provinciaSelect = Select(driver.find_element_by_xpath('//*[@id="ddlState"]'))
localidadSelect = Select(driver.find_element_by_xpath('//*[@id="ddlLocation"]'))
driver.implicitly_wait(2)
buscarPinturerias = driver.find_element_by_css_selector('#search_paint_shops')
for i in range(1,len(provincias)):
provinciaSelect.select_by_index(i)
driver.implicitly_wait(2)
for j in range(1, len(localidadSelect.options)):
localidadSelect.select_by_index(j)
print(i,j)
I am getting this error
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
That's how far i could get. I know i have to Submit the result and wait until the data apear. I don't know how to do that
UPDATE
I've updated the code to this:
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome('')
driver.get('https://sherwin.com.ar/hagalo-usted-mismo/Donde-compro')
# all options of the dropdown list
provincias = driver.find_elements_by_xpath('//*[@id="ddlState"]/option')
provinciaSelect = Select(driver.find_element_by_xpath('//*[@id="ddlState"]'))
localidadSelect = Select(driver.find_element_by_xpath('//*[@id="ddlLocation"]'))
driver.implicitly_wait(2)
buscarPinturerias = driver.find_element_by_css_selector('#search_paint_shops')
for i in range(1, len(provincias)):
provinciaSelect.select_by_index(i)
elemLoc = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="ddlLocation"]/option[2]' )))
# to know in which state i am
print(i)
for j in range(1, len(localidadSelect.options)):
localidadSelect.select_by_index(j)
buscarPinturerias.submit()
elemRes = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="map_info"]/div' )))
resBlock = driver.find_element_by_xpath('//*[@id="map_info"]/div')
dataBlock = resBlock.find_elements_by_tag_name('li')
for l in dataBlock:
# I have the error here now
print(l.text.encode('utf-8'))
Now the problem is that if i make
print(l.text.encode('utf-8'))
it raises a
StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
is it because i don't wait enough?
web-scraping selenium-chromedriver python-3.6
web-scraping selenium-chromedriver python-3.6
edited Nov 10 '18 at 21:50
pablo lopes
asked Nov 10 '18 at 19:06
pablo lopespablo lopes
12
12
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53242453%2fselenium-dynamic-data-select-python%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53242453%2fselenium-dynamic-data-select-python%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown