I'am currently web scraping one page with puppeteer. I am trying to make something which can speed up my work.
My HTML Markup looks something like this
<div class="inner-wrapper" style="">
<div class="style-001">
<ul role="listbox" aria-multiselectable="true" class="style-002">
<li role="option" aria-selected="false" class="style-003">
<span class="style-004">First Option</span>
</li>
<li role="option" aria-selected="false" class="style-003">
<span class="style-004">Second Option</span>
</li>
<li role="option" aria-selected="false" class="style-003">
<span class="style-004">Third Option</span>
</li>
</ul>
</div>
I was trying to select specific 'li' based on span's text. This page is dynamic so sometimes 'Third Option' will have index [3] and sometimes other one. It have to be selected just by span's text because It won't work in other situations. I can't use class because this website uses same classes for every 'li'.
I did research on google and stackoverflow and didn't find working solution. I tried selecting by xpath, js selector and more. And even I tried something like this:
const [link] = await page.$x('//div[2]/div/div/section/div[2]/div/div/div/ul/li[2]/span[contains(text(), "First Option")]');
await link.click();
or
let selectOption = await page.waitForXPath(`//div[2]/div/div/section/div[2]/div/div/div/ul/li[contains(text(),'First Option')]`);
await selectOption.click();
If someone can help me, I will huge appreciate.
@EDIT If it is important clicking on any option this website changes aria-selected="false" to "true". Maybe it will help in any way?