def check_cover_confirmed(self, div, anchor): """Check whether the current book cover is user-confirmed.""" # For some reason clicking on the anchor doesn't work; we have to click # on the image element icon = anchor.find_element_by_css_selector('img.icon') logger.debug("Clicking cover info button") self.driver.execute_script( "arguments[0].scrollIntoView({block: 'center'});", div) ActionChains(self.driver).move_to_element(div) \ .move_to_element(icon).click(icon).perform() lb_content = self.wait_for_lb() confirmed = None confirm_div = try_find(lb_content.find_element_by_css_selector, '.coverinfo > div.alwaysblue:nth-child(1)') if confirm_div: if try_find(confirm_div.find_element_by_id, 'changecover_confirm'): logger.debug("Found cover is not confirmed") confirmed = False elif try_find(confirm_div.find_element_by_css_selector, 'img.icon[src$="tick.png"]'): logger.debug("Found cover is confirmed") confirmed = True if confirmed is None: logger.warning("Unable to determine cover confirmation status") self.close_lb(lb_content, "Closing cover info lightbox") return confirmed
def get_dewey(self): """Get book DDC if manually set.""" elt = try_find(self.driver.find_element_by_id, 'bookedit_dewey') if not elt or not elt.is_displayed(): return None value = elt.text logger.debug("Found Dewey value: %r", value) return value
def get_lexile(self): """Get book lexile value.""" elt = try_find(self.driver.find_element_by_id, 'bookedit_lexile') if not elt: return None value = elt.text logger.debug("Found Lexile value: %r", value) return value
def get_from_where(self): """Get book venue information.""" div = try_find(self.driver.find_element_by_class_name, 'xlocation') if not div: logger.debug("'From where' field not found") return None name = div.text if not name: return {'name': ''} anchor = try_find(div.find_element_by_css_selector, '.xlocation > a') if anchor: # Parse venue link href = urlparse(anchor.get_attribute('href')) venue_id = self.venue_path_re.match(href.path).group(1) logger.debug("Found 'From where' field %r, venue id %r", name, venue_id) return {'name': name, 'venue_id': venue_id} else: # Free text logger.debug("Found 'From where' field %r, free text", name) return {'name': name}
def get_reading_dates(self): """Get list of reading dates.""" dates = [] div = try_find(self.driver.find_element_by_id, 'startedfinished') if not div: return dates for row in div.find_elements_by_css_selector('tr[id^="xSF"]'): std, ftd = row.find_elements_by_tag_name('td') started = std.text.strip() finished = ftd.text.strip() logger.debug("Found reading dates: %r, %r", started, finished) dates.append({'started': started, 'finished': finished}) return dates